3.4 for命令
重复一系列的命令是一种常见的变成实践。通常需要重复一组命令直到满足一个特定的条件。bash shell提供for命令,用于创建通过一系列值重复的循环。每次重复使用系列中的一个值执行一个定义的命令集。
bash shell for命令的基本格式如下:
for var in list
docommands
done
在参数list中提供一系列用于迭代的值。指定列表中的值有几种不同的方法。在每次迭代中,变量var包含列表的当前值。第一次迭代使用列表中的第一项,第二次迭代使用第二项,依次类推直到列表中的所有项都被使用为止。
进入do和done语句之间的命令可以是一条或多条的标准bash shell命令。在命令中,变量$var 包含当前迭代的列表项值。如果愿意,可以将do语句与for语句放在同一行,但是必须使用分号将它与列表项分开:for var in list ; do。
3.4.1 读取列表
for命令的最基本使用方法是通过在for命令中定义一列值来迭代。每次for命令通过提供的值列表进行迭代时,它将列表中的下一个值赋值给变量。最后一次迭代之后,变量在shell脚本的其他部分中任然有效,它仍然是迭代的最后一个值。
当shell看到列表值当中的单引号,并试图用它们来定义一个单独的数据值,它破坏了list中的过程。有两种方法解决这个问题:
Ø 使用转义字符(\)来转义单引号
Ø 使用双引号来定义使用单引号的值
这两种方法都可以解决列表中存在单引号和双引号的问题。
另一个问题是运行多字值。for循环认为每个值都用空格分隔,如果包含空格的数据值,就遇到另一个问题。如果在个别的数据值中有空格,必须使用双引号将它们包围起来。使用双引号包围值时,shell不会将双引号作为值的一部分。
#!/bin/bash
#for命令读取列表
for fl in $HOME/*
doecho $fl
doneecho "for var in list;do"
for fl in $HOME/*;doecho $fl
doneecho "list中带有单引号"
for wd in I don't know if this'll work
doecho $wd
doneecho "list中使用转义字符!"
for wd in I don\'t know if "this'll" work
doecho $wd
doneecho "list中带有空格!"
for city in Nevade New Hampshire New Mexico New York North Carolina
doecho $city
doneecho "对list表中在一起的使用双引号!"
for city in Nevade "New Hampshire" "New Mexico" "New York" "North Carolina"
doecho $city
done