在bash有三中類型的循環結構表達方法:for,while,until。這裏介紹經常使用的兩種:for和while。python
forbash
bash的for循環表達式和python的for循環表達式風格很像:spa
for var in $(ls) do echo "$var"done
取值列表有不少種表達方式,能夠結合各類命令好比 ls,cat,sed等等3d
也能夠是各類迭代類型,好比:code
{1..100..2}: 1到100增量爲2blog
{a..z}: a到z的字母ip
`seq 1 2 100`: 1到100增量爲2pip
whilefor循環
bash的while循環表達式和bash的if表達式風格相似,循環條件須要用方括號 []:class
COUNTER=0 while [ $COUNTER -lt 10] do echo "$COUNTER" let COUNTER+=1 done
while和重定向聯用
輸出重定向'>'比較好理解,就是將while後面的命令以及循環體中的標準輸出重定向,例如
while seq 0 1 10 #注意這裏直接寫命令就行,不須要``或者[] do echo "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" do echo "This line contains 1" done<test.txt>result.txt