Bash的循環結構(for和while)


在bash有三中類型的循環結構表達方法:for,while,until。這里介紹常用的兩種:for和while。

for

bash的for循環表達式和python的for循環表達式風格很像:

for var in $(ls)
do
  echo "$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]
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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM