幾個shell程式設計小知識(轉)

BSDLite發表於2007-08-11
幾個shell程式設計小知識(轉)[@more@]  一. while 迴圈
  while 命令格式
  
  while 條件表
  do
  命令表
  done
  
  執行過程
  
  shell首先執行條件表,如果條件表的最後一條語句的退出狀態為零,則執行盾環體內的命令表,執行完後,再檢查條件表,如果退出狀態為零將繼續執行,如此迴圈往復直到條件表的最後一條語句的退出狀態非零. 退出狀態為零就是條件為真True.
  
  舉例說明 假如shell檔案的內容如下:
  
  Sum=0
  i=0
  while true #true是系統的關鍵詞 表示真
  do
  i=`expr $i + 1`
  Sum=`expr $Sum + $i`
  if [ $i = "100" ]
  then
  break;
  fi
  done
  echo $i $Sum
  最後這個程式顯示的是 100 5050
  這個程式的運算就是將1到100加起來
  
  下面將這個程式再改動一下
  
  Sum=0
  i=0
  while [ $i != "100" ]
  do
  i=`expr $i + 1`
  Sum=`expr $Sum + $i`
  done
  echo $i $Sum
  
  改動後的程式運算結果和上面是一樣 但程式比上面的要簡練
  
  在這個迴圈中還可以以until做為測試條件 它正好與while測試的條件相反,也就是當條件為假時將繼續執行迴圈體內的語句,否則就退出迴圈體,下面還用這個例子.
  
  Sum=0
  i=0
  until [ $i = "100" ]
  do
  i=`expr $i + 1`
  Sum=`expr $Sum + $i`
  done
  echo $i $Sum
  當i不等於100時迴圈 就是當條件為假時迴圈,否則就退出,而第一個例子是當i不等於100
  時迴圈,也就是測試條件為真時迴圈.
  
  二.for 迴圈
  命令格式:
  for 變數 in 名字列表
  do
  命令列表
  done
  
  這裡的名字列表是一個由空格分隔的字串列表,shell在執行for迴圈時每次依次從名字表中取出一個字串賦給迴圈變數作為變數的值.
  在寫for語句時,也可以省略in 名字列表部分,這表示用當前的位置引數來代替這時的名字列表.
  下面舉個例子
  比如在你的電腦中有兩個目錄,一個是aa,一個是bb在這兩個目錄中有5個相同的檔案,但其中一個目錄中的一個或多個檔案剛剛修改過,現在我忘記剛才改的是那幾個檔案 了,那麼我靠梢員冉弦幌掄飭礁瞿柯嫉奈募?橢?懶?程式如下:
  
  for File in a1 a2 a3 a4 a5
  do
  diff aa/$File bb/$File
  done
  
  下面再舉一個不帶名字列表的例子
  
  for File
  do
  echo $Filw
  done
  
  檔案內容儲存在a.sh中 並可執行
  我們在執行這個shell程式時命令列如下:
  a.sh a1 a2 a3 a4 a5
  執行結果如下:
  a1
  a2
  a3
  a4
  a5
  大家從這個例子中可以看到命令列的引數被逐一讀入一次
  
  三.迴圈控制語句
  break 命令不執行當前迴圈體內break下面的語句從當前迴圈退出.
  continue 命令是程式在本循體內忽略下面的語句,從迴圈頭開始執行.

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617542/viewspace-946595/,如需轉載,請註明出處,否則將追究法律責任。

相關文章