1. Bash shell中for命令的基本格式:
for var in list
do
commands
done
在list参数中,你提供了迭代中要用的一系列值。在每个迭代中,变量var会包含列表中的当前值。在do和done语句之间输入的命令可以是一条或多条标准的bash shell命令。在这些命令中,$var变量包含着这次迭代对应的当前那个列表中的值。
也可以将do语句和for语句放在同一行,但必须用分号将其同列表中的值分开:for var in list; do。
2. Bash shell会将下列字符当作字段分隔符:
(1) 空格;
(2) 制表符;
(3) 换行符。
Bash shell在数据中看到了这些字符中的任意一个,它就会假定你在列表中开始了一个新的数据段。在处理可能含有空格的数据时,会非常麻烦,要解决这个问题,你可以在shell脚本中临时更改IFS环境变量的值来限制一下被bash shell当作字段分隔符的字符。(IFS=$’\n’)
3. 在改变IFS之前保存原来的IFS值,之后再恢复它。这个技术可以这样编程:
IFS.OLD=$IFS
IFS=$’\n’
<use the new IFS value in code>
IFS=$IFS.OLD
假定你要遍历一个文件中用冒号分割的值。你要做的就是将IFS的值设为冒号: IFS=:
如果你要指定多个IFS字符,只要将它们在赋值行串起来就行:
IFS=$’\n:;’”这个赋值会将换行符、冒号、分号和双引号作为字段分隔符。
4. C语言风格的for命令格式如下:
for (( a = 1; a < 10; a++ ))
注意,没有遵循标准的bash shell for命令:
(1) 给变量赋值可以有空格;
(2) 条件中的变量不以美元符开头;
(3) 迭代过程的算式未用expr命令格式。
5. while命令的格式是:
while test command
do
other commands
done
while命令中定义的test命令和if-then语句中定义的是一样的格式。和if-then语句中一样,你可以使用任何普通的bash shell命令,或者用test命令作为条件。
while命令的关键是,指定的test命令的退出状态码必须随着循环中运行的命令改变。如果退出状态码从来不变,那while循环将会一直不停地循环。
6. until命令的格式如下:
until test commands
do
other commands
done
until命令和while命令工作的方式完全相反。until命令要求你指定一个通常输出非零退出状态码的测试命令。只有测试命令的退出状态码非零,bash shell才会指定循环中列出的那些命令。一旦测试命令返回了退出状态码0,循环就结束了。
7. 循环语句可以在循环内使用任意类型的命令,包括其他循环命令。这种称为嵌套循环。
8. 循环处理文件数据通常,你必须遍历存储在文件中的数据。这要求结合两种技术:
(1) 使用嵌套循环;
(2) 修改IFS环境变量。
9. break命令可以用来退出任意类型的循环,包括while和until循环。
有几种情况可以使用break命令:
(1) 跳出单个循环
(2) 跳出内部循环
(3) 跳出外部循环
10.continue命令是提早结束执行循环内部的命令但并不完全终止整个循环的一个途径。它允许你在循环内部设置shell不执行命令的条件。
11.bash shell还允许使用标准的命令重定向和管道来改变循环的输出。