詳細(xì)介紹Linux shell腳本基礎(chǔ)學(xué)習(xí)(四)
上一篇Linux shell腳本基礎(chǔ)學(xué)習(xí)中我們講了Linux shell腳本中控制流程的if 、select、case ,這里接著介紹Linux shell腳本控制流程的loop和引號(hào),控制流程這部分內(nèi)容比較多,還有一部分內(nèi)容是關(guān)于here document的。
4.loop
loop表達(dá)式:
while ...; do
....
done
while-loop 將運(yùn)行直到表達(dá)式測(cè)試為真。will run while the expression that we test for is true.
關(guān)鍵字"break" 用來(lái)跳出循環(huán)。而關(guān)鍵字”continue”用來(lái)不執(zhí)行余下的部分而直接跳到下一個(gè)循環(huán)。
for-loop表達(dá)式查看一個(gè)字符串列表 (字符串用空格分隔) 然后將其賦給一個(gè)變量:
for var in ....; do
....
done
在下面的例子中,將分別打印ABC到屏幕上:
#!/bin/sh
for var in A B C ; do
echo "var is $var"
done
下面是一個(gè)更為有用的腳本showrpm,其功能是打印一些RPM包的統(tǒng)計(jì)信息:
#!/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
這里出現(xiàn)了第二個(gè)特殊的變量$*,該變量包含了所有輸入的命令行參數(shù)值。
如果您運(yùn)行showrpm openssh.rpm w3m.rpm webgrep.rpm
此時(shí) $* 包含了 3 個(gè)字符串,即openssh.rpm, w3m.rpm and webgrep.rpm.
5. 引號(hào)
在向程序傳遞任何參數(shù)之前,程序會(huì)擴(kuò)展通配符和變量。這里所謂擴(kuò)展的意思是程序會(huì)把通配符(比如*)替換成合適的文件名,它變量替換成變量值。為了防 止程序作這種替換,您可以使用引號(hào):讓我們來(lái)看一個(gè)例子,假設(shè)在當(dāng)前目錄下有一些文件,兩個(gè)jpg文件, mail.jpg 和tux.jpg。
1.2 編譯SHELL腳本
#ch#!/bin/sh mod +x filename
cho *.jpg ∪緩螅梢醞ü淙耄?./filename 來(lái)執(zhí)行您的腳本。
這將打印出"mail.jpg tux.jpg"的結(jié)果。
引號(hào) (單引號(hào)和雙引號(hào)) 將防止這種通配符擴(kuò)展:
#!/bin/sh
echo "*.jpg"
echo '*.jpg'
這將打印"*.jpg" 兩次。
單引號(hào)更嚴(yán)格一些。它可以防止任何變量擴(kuò)展。雙引號(hào)可以防止通配符擴(kuò)展但允許變量擴(kuò)展。
#!/bin/sh
echo $SHELL
echo "$SHELL"
echo '$SHELL'
運(yùn)行結(jié)果為:
/bin/bash
/bin/bash
$SHELL
最后,還有一種防止這種擴(kuò)展的方法,那就是使用轉(zhuǎn)義字符——反斜桿:
echo *.jpg
echo $SHELL
這將輸出:
*.jpg
$SHELL
Linux shell腳本基礎(chǔ)這里就到這里,控制流程還有一點(diǎn)here document的內(nèi)容下次再分析。
【編輯推薦】
- 詳細(xì)解析Linux服務(wù)器攻擊的分級(jí)防御
- Linux系統(tǒng)安全提高之安全配置
- Linux系統(tǒng)安全提高之系統(tǒng)優(yōu)化
- 詳述怎么使用Linux救援模式
- 詳細(xì)講述如何使用Linux ntfs分區(qū)