1.for命令
格式:
for var in list
do
commands
done
在list参数中,需要提供迭代中要用到的一系列值。
在每次迭代中,变量var会包含列表中的当前值。第一次迭代会使用list中的第一个值,第二次使用list中的第二个值,以此类推,直到列表中的所有值都过一遍。
在do和done语句之间输入的命令可以是一条或多条标准的bash shell命令。
1.1 读取列表中的值
for命令最基本的用法就是遍历for命令自身所定义的一系列值。
for test in a b c d e f
do
echo The test is $test
done
for循环假定每个值都是用空格分隔开的。如果在单独的数据值中有空格或单引号,就必须用双引号将这些值圈起来。
for test in ab "c d" "ef g" "h'ijk"
do
echo The test is $test
done
(注:在某个值两边使用双引号时,shell并不会将双引号当成值的一部分。)
1.2 从变量读取列表
用for循环遍历变量中的整个列表。
如:
list="a b c d ef h"
list=$list" ijk"
for var in $list
do
echo This var is $var
done
2.while命令
while命令允许定义一个要测试的命令,然后循环执行一组命令,只要定义的测试命令返回的是退出状态码0。在测试命令返回非零的退出状态码是,while命令会停止执行那组命令。
格式:
while test cmd
do
other cmds
done
whiel命令的关键在于所指定的test cmd的退出状态码必须随着循环中运行的命令而改变。如果退出状态码不发生变化,while循环就将一直不停地进行下去。
3.until命令
until命令和while命令的工作方式完全相反。until命令要求你指定一个通常返回非零退出状态码的测试命令。只有测试命令的退出状态码不为0,bash shell才会执行循环中列出的命令。一旦测试命令返回了退出状态码0,循环就结束了。
格式:
until test cmds
do
other cmds
done
4.嵌套循环
循环结构之间可以相互嵌套。
5.控制循环
5.1 break命令
break命令可以退出任意类型的循环。
break命令还可以接受单个命令行参数值,break n
其中n指定了要跳出的循环层数,默认情况下,n=1,表明跳出的是当前循环。
如果n=2,break命令就会停止下一级的外部循环。
5.2 continue命令
用于中止某次循环中的命令,但不会完全终止整个循环。
6.处理循环的输出
在shell脚本中,可以对循环的输出使用管道或进行重定向。这可以通过在done命令后添加一个处理命令来实现。
如:done > output.txt
这样shell会将循环的结果重定向到文件output.txt中,而不是显示在屏幕上。