詳細介紹Linux shell腳本基礎學習(四)

http://os.51cto.com/art/201003/186826.htm

上一篇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的內容下次再分析。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章