來源:互聯網
上載者:User
關鍵字
UNIX系統管理
shell程式設計
迴圈語句
完成這一章,你將能夠作以下事情:
使用while語句在條件為真的時候重複地執行一段代碼。
使用until語句重複執行一段代碼直到條件為真。
使用交互性的for語句進行迴圈控制。
1.迴圈的簡單介紹
目標: 重複的執行一段命令清單。
控制; 基於一個關鍵命令的傳回值。
三種格式: while ... do ... done
until ... do ... done
for ... do ... done
迴圈語句讓你可以重複執行一個命令清單,而決定是繼續迴圈還是跳出迴圈是基於一個命令的傳回值。 test命令常常被用來控制一個迴圈是否繼續。
與分支語句不同的是,在分支語句中開始一個分支語句的關鍵字和結束一個分支語句的關鍵字是相反的(if/fi 和case/esac),迴圈語句由一個關鍵字和一些條件開始,循環體整個用do/done來包圍起來。
2.使用let來進行算術計算
語法:
let expression or (( expression ))
例子:
$ x=10 $ x=12
$ y=2 $ let "x <10"
$ let x=x+2 $ echo $?
$ echo $x 1
12 $ (( x > 10 ))
$ let "x = x / (y+1)" $ echo $?
$ echo $x $ 0
4 $ if ((x > 10 ))
$ (( x = x + 1 )) > then echo x greater
$ echo $x > else echo x not greater
5 fi
x greater
迴圈語句通常使用一個增長的數位變數來進行控制。 使用let命令,可以在shell腳本中使用算術運算式。 這個命令允許使用長的整數運算。 在上例中,expression代表一個shell變數的算術運算式和能夠被shell識別的操作符,而(( ))可以替let命令。 shell能夠識別的運算式如下所示:
操作符 描述
- 減去
! 邏輯相反
* / % 乘,除,餘數
+ - 加,減
<= >= < > 關係比較
== != 等於不等於
= 賦值
括弧能夠被用作改變運算式中計算的順序,就像在
let "x=x/(y+1)"
中一樣
注意雙引號被用來忽略括弧的特殊含義。 同樣如果你希望使用空格來分隔操作符和操作符的時候,就必須使用雙引號,或者(( ))語句:
let " x = x + (y / 2)" 或者(( x= x+ (y / 2) ))
當使用邏輯和關係操作符,(!,<=,>=,<,>,++,~=),的時候,shell會返回一個代碼變數,?會反映結果是真還是假,再一次說明,必須使用雙引號來防止shell將大於和小於運算子當作I/ O重定向。