上一篇Linux shell指令碼基礎學習中我們講了Linux shell指令碼中控制流程程的if 、select、case ,這裡接著介紹Linux shell指令碼控制流程程的loop和引號,控制流程程這部分內容比較多,還有一部分內容是關於here document的。
4.loop
loop運算式:
while ...; do
....
done
while-loop 將運行直到運算式測試為真。will run while the expression that we test for is true.
關鍵字"break" 用來跳出迴圈。而關鍵字”continue”用來不執行餘下的部分而直接跳到下一個迴圈。
for-loop運算式查看一個字串列表 (字串用空格分隔) 然後將其賦給一個變數:
for var in ....; do
....
done
在下面的例子中,將分別列印ABC到螢幕上:
#!/bin/sh
for var in A B C ; do
echo "var is $var"
done
下面是一個更為有用的指令碼showrpm,其功能是列印一些RPM包的統計資訊:
#!/bin/sh
# list a content summary of a number of RPM packages
# USAGE: showrpm rpmfile1 rpmfile2 ...
# EXAMPLE: showrpm /cdrom/RedHat/RPMS/*.rpm
for rpmpackage in $*; do
if [ -r "$rpmpackage" ];then
echo "=============== $rpmpackage =============="
rpm -qi -p $rpmpackage
else
echo "ERROR: cannot read file $rpmpackage"
fi
done
這裡出現了第二個特殊的變數$*,該變數包含了所有輸入的命令列參數值。
如果您運行showrpm openssh.rpm w3m.rpm webgrep.rpm
此時 $* 包含了 3 個字串,即openssh.rpm, w3m.rpm and webgrep.rpm.
5. 引號
在向程式傳遞任何參數之前,程式會擴充萬用字元和變數。這裡所謂擴充的意思是程式會把萬用字元(比如*)替換成合適的檔案名稱,它變數替換成變數值。為了防 止程式作這種替換,您可以使用引號:讓我們來看一個例子,假設在目前的目錄下有一些檔案,兩個jpg檔案, mail.jpg 和tux.jpg。
1.2 編譯SHELL指令碼
#ch#!/bin/sh mod +x filename
cho *.jpg ∪緩螅梢醞ü淙耄?./filename 來執行您的指令碼。
這將列印出"mail.jpg tux.jpg"的結果。
引號 (單引號和雙引號) 將防止這種萬用字元擴充:
#!/bin/sh
echo "*.jpg"
echo '*.jpg'
這將列印"*.jpg" 兩次。
單引號更嚴格一些。它可以防止任何變數擴充。雙引號可以防止萬用字元擴充但允許變數擴充。
#!/bin/sh
echo $SHELL
echo "$SHELL"
echo '$SHELL'
運行結果為:
/bin/bash
/bin/bash
$SHELL
最後,還有一種防止這種擴充的方法,那就是使用逸出字元——反斜杆:
echo *.jpg
echo $SHELL
這將輸出:
*.jpg
$SHELL
Linux shell指令碼基礎這裡就到這裡,控制流程程還有一點here document的內容下次再分析。