在bash有三中类型的循环结构表达方法:for,while,until。这里介绍常用的两种:for和while。
for
bash的for循环表达式和python的for循环表达式风格很像:
for var in $(ls) doecho "$var"done
取值列表有很多种表达方式,可以结合各种命令比如 ls,cat,sed等等
也可以是各种迭代类型,比如:
{1..100..2}: 1到100增量为2
{a..z}: a到z的字母
`seq 1 2 100`: 1到100增量为2
while
bash的while循环表达式和bash的if表达式风格类似,循环条件需要用方括号 []:
COUNTER=0 while [ $COUNTER -lt 10] doecho "$COUNTER"let COUNTER+=1 done
while和重定向联用
输出重定向'>'比较好理解,就是将while后面的命令以及循环体中的标准输出重定向,例如
while seq 0 1 10 #注意这里直接写命令就行,不需要``或者[] doecho "ok"sleep 1000 #这个循环是个无限循环,加sleep为了查看结果 done>test.tx
$cat test.txt 0 1 2 3 4 5 6 7 8 9 10 ok
注意,这里的重定向不仅打印结构体中的标准输出,而且也打印命令的输出。
输入重定向是把文件重定向到while后面的命令中,类似于管道(pipe)
while grep "1" do
echo "This line contains 1"
done<test.txt
利用刚刚生成的test.txt文件,运行上述脚本的结果为:
可以看出,虽然有两行包含字符“1”,但是结构体里的echo语句只执行了一次,这说明只要while后面的命令有输出,那么就执行结构体一次,所以这和cat | grep也没什么区别了。
当然也可以输入输出重定向一起使用,比如上面的例子可以改为:
while grep "1" doecho "This line contains 1" done<test.txt>result.txt