在寫shell腳本時,常常會用到循環語句。這裡簡單總結下常用的3種循環語句,以便以後能快速地參考寫出【哎,最近腦子不太好使了,在多種語言交叉編程時,常常切換不過來,犯低級錯誤】,廢話不說,開始demo:
1、for
主要用於:在已知序列裡遍歷元素
[plain]
- #! /bin/sh -
-
- if [ $# -ge 1 ]; then
- path=$@
- else
- path=*.sh
- fi
-
- for i in $path
- do
- ls -lh $i
- done
注意:for循環的in列表時可選的,如果省略,shell會遍歷整個命令行參數,此時 for i 相當於 for i in "$@"
再給一個for的用法示例:
[plain]
- #! /bin/sh -
-
- for i in `seq 1 9`
- do
- echo $i
- done
注意:for in 可以和 `` 與 $() 合用,上面的for i in `seq 1 9` 也等價與 for i in $(seq 1 9)
再給一個for的用法示例:
[plain]
- #! /bin/sh -
-
- for i in {a..z}
- do
- echo $i
- done
注意:for in 的大括號{}具有自動補齊功能,大括號與要補齊的內容之間不能有空格,要補齊的內容首尾由兩個..相連,其間不能有空格
再給個for的用法示例:
[plain]
- #! /bin/sh -
-
- for (( i=1; i<=10; i++ ))
- do
- echo $i
- done
提醒:這個主要是用了(())
2、while
主要用於:當某條件成立時,一直執行
[plain]
- #! /bin/sh -
-
- cnt=9
-
- while [ $cnt -ge 0 ]
- do
- echo $((cnt--))
- done
注意:1、算術運算,需要放在$(()) 的括號中
2、對於變量的算術運算,在$(())中,變量前面不需要$
3、unitl
主要用於:當某條件成立時,停止執行
[plain]
- #! /bin/sh -
-
- cnt=9
- until [ $cnt -lt 0 ]
- do
- echo $cnt
- cnt=$((cnt - 1))
- done
注意:給變量賦值時,前面不要加$
判斷語句,可以參考 Shell case語句用法小結 (見 http://www.linuxidc.com/Linux/2012-02/54385.htm )與 Shell if語句用法小結 (見 http://www.linuxidc.com/Linux/2012-02/54343.htm )