標籤:style blog 使用 ar for 檔案 資料 sp div
國慶過後;感覺有點慵懶些了;接著上篇;我們繼續來學習迴圈語句。
一. for迴圈
與其他程式設計語言類似,Shell支援for迴圈。
for迴圈一般格式為:for 變數 in 列表do command1 command2 ... commandNdone
列表是一組值(數字、字串等)組成的序列,每個值通過空格分隔。每迴圈一次,就將列表中的下一個值賦給變數
例如,順序輸出當前列表中的數字
for01.sh$ cat for01.sh #!/bin/shfor i in 1 2 3 4 5do echo "this is $i"done$ ./for01.sh this is 1this is 2this is 3this is 4this is 5
當然也可以向其他語言那樣for ((i=1;i++<5));但是是要雙括弧;這個是與眾不同。
#!/bin/shfor ((i=1;i<=5;i++))do echo "this is $i"done
【注意】in 列表是可選的,如果不用它,for 迴圈使用命令列的位置參數。如下:
$ cat for01.sh #!/bin/shfor ido echo "this is $i"done$ ./for01.sh 1 2 3 4 5 this is 1this is 2this is 3this is 4this is 5
【note】對於列表;像上面一樣;其實命令ls目前的目錄下的所有檔案就是一個列表
二.while 迴圈
while迴圈用於不斷執行一系列命令,也用於從輸入檔案中讀取資料;命令通常為測試條件
#其格式為:while commanddo Statement(s) to be executed if command is truedone
命令執行完畢,控制返回迴圈頂部,從頭開始直至測試條件為假。
以for迴圈的例子。
$ cat while01.sh #!/bin/shi=0while [ $i -lt 5 ]do let "i++" echo "this is $i"done$ ./while01.sh this is 1this is 2this is 3this is 4this is 5
其實while迴圈用的最多是用來讀檔案。
#!/bin/bashcount=1 cat test | while read line #cat 命令的輸出作為read命令的輸入,read讀到的值放在line中do echo "Line $count:$line" count=$[ $count + 1 ] done或者如下#!/bin/shcount=1while read linedo echo "Line $count:$line" count=$[ $count + 1 ] done < test
【注意】當然你用awk的話;那是相當簡單;awk ‘{print "Line " NR " : " $0}‘ test
輸出時要去除冒號域分隔字元,可使用變數IFS。在改變它之前儲存IFS的當前設定。然後在指令碼執行完後恢複此設定。使用IFS可以將域分隔字元改為冒號而不是空格或tab鍵
例如檔案worker.txtLouise Conrad:Accounts:ACC8987Peter Jamas:Payroll:PR489Fred Terms:Customer:CUS012James Lenod:Accounts:ACC887Frank Pavely:Payroll:PR489while02.sh如下:#!/bin/sh#author: li0924#SAVEIFS=$IFSIFS=:while read name dept id do echo -e "$name\t$dept\t$id" done < worker.txt#IFS=$SAVEIFS
三.until迴圈
until 迴圈執行一系列命令直至條件為 true 時停止。until 迴圈與 while 迴圈在處理方式上剛好相反
until 迴圈格式為: until commanddo Statement(s) to be executed until command is truedone
command 一般為條件運算式,如果傳回值為 false,則繼續執行迴圈體內的語句,否則跳出迴圈
$ cat until01.sh #!/bin/shi=0until [ $i -gt 5 ]do let "i++" echo "this is $i"done
一般while迴圈優於until迴圈,但在某些時候,也只是極少數情況下,until 迴圈更加有用。詳細介紹until就不必要了
四. break和continue命令
1. break命令
break命令允許跳出所有迴圈(終止執行後面的所有迴圈)
2.continue命令
continue命令與break命令類似,只有一點差別,它不會跳出所有迴圈,僅僅跳出當前迴圈。
break01.sh#!/bin/shfor ((i=1;i<=5;i++))do if [ $i == 2 ];then break else echo "this is $i" fidone
至於continue命令示範;你就把break替換下;執行看下效果就行了。不解釋。
shell基礎(八)-迴圈語句