/dev/mnt0 rm *該程序在備份資料后,刪除檔案,但當(dāng)cpio命令不能成功執(zhí)行時,rm命令還是把資料刪除了,。中 Unix系列shell程序編寫( 二 )。" />

日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

中 Unix系列shell程序編寫( 二 )


#unload -program to backup and remove files
cd $1
ls -a | cpio -o > /dev/mnt0
rm *該程序在備份資料后,刪除檔案,但當(dāng)cpio命令不能成功執(zhí)行時,rm命令還是把資料刪除了,我們可不希望這樣,為了避免此情況,可以用if - then語句:
#--卸載和判斷刪除程序cd $1
if ls -a | cpio > /dev/mnt0
then
rm *
fi
上面程序在cpio執(zhí)行成功后才刪除檔案同時,若執(zhí)行沒有成功,我們希望得到提示,sh中的echo命令可以向用戶顯示消息,并顯示后換行,上面程序可以寫成:
#--卸載和判斷刪除程序
cd $1
if ls -a | cpio > /dev/mnt0
then
echo "正刪除文件資料... ..."
rm *
fiecho命令可以使用一些特殊的逃逸字符進行格式化輸出,下面是這些字符及其含義:bBackspace
c顯示后不換行
f在終端上屏幕的開始處顯示
n換行
r回車
t制表符
v垂直制表符
反斜框
nnn 用1,2或3位8進制整數(shù)表示一個ASCII碼字符2>if - then - else語句不用多說它的作用,別的高級語言中都有,格式為:
if command1
then
command2
command3
else
command4
command5
fi在此結(jié)構(gòu)中,command1中是先執(zhí)行,當(dāng)command1成功執(zhí)行時,將執(zhí)行command2和command3,否則執(zhí)行command4和command5注意看下面程序:
#備份程序
cd $1
if ls -a |cpio -o > /dev/mnt0
then
echo "刪除源資料... ..."
rm *
else
echo "磁帶備份失敗!"
fi3>test命令進行條件測試if語句可以通過測試命令執(zhí)行的返回狀態(tài)來控制命令的執(zhí)行,若要測試其他條件,在bsh中可以使用test命令 。該命令檢測某一條件,當(dāng)條件為真時返回0,否則返回非0值 。test命令可以使Shell程序中的if語句象其他程序語言中的條件判斷語句一樣,具有很強的功能 。test命令的使用方法為:
test condition
可測試的條件分為4類:
1)測試兩個字符串之間的關(guān)系 。
2)測試兩個整數(shù)之間關(guān)系 。
3)測試文件是否存在或是否具有某種狀態(tài)或?qū)傩?。
4)測試多個條件的與(and)或(or)組合 。1、條件語句>>test語句1>測試字符串間的關(guān)系bsh把所有的命令行和變量都看作字符串 。一些命令如expr和test可以把字符當(dāng)作數(shù)字進行操作 。同樣任何數(shù)字也可以作為字符串進行操作 。用戶可以比較兩個字符串相等或不等,也可以測試一個串是否賦了值 。有關(guān)串的操作符如下:
str1 = str2當(dāng)兩個串有相同內(nèi)容、長度時為真
str1 != str2當(dāng)串str1和str2不等時為真
-n str1當(dāng)串的長度大于0時為真(串非空)
-z str1當(dāng)串的長度為0時為真(空串)
str1 當(dāng)串str1為非空時為真不但Shell程序可以使用test進行條件判斷,test命令也可以獨立執(zhí)行,如:$str1=abcd
$test $str1 = abcd
$echo $?
結(jié)果顯示:0與上例中第一行賦值語句中的等號不同,test命令中的等號兩邊必須要有空格 。本例test命令共有3個參數(shù) 。注意兩個串相等必須是長度和內(nèi)容都相等 。$str1="abcd "
$test "$str1" = abcd
$echo $?
結(jié)果顯示:1上面str1包含5個字符,其中最后一個為空格符 。而test命令中的另一個串只有4個字符,所以兩串不等,test返回1 。不帶任何操作符和使用-n操作符測試一個串結(jié)果是一樣的,例如:$str1=abce
$test $str1
$echo $?
結(jié)果顯示:0
$test -n $str1
$echo $?
結(jié)果顯示:0但是,上面兩條命令也有一點差別,反映出了使用test命令潛在的問題,請看下例:$str1=" "
$test $str1
$echo $?
結(jié)果顯示:1
$test -n "$str1"
$echo $?
結(jié)果顯示:0
$test -n $str1
結(jié)果顯示:test:argument expected上例中,第一次測試為假因為Shell在執(zhí)行命令行之前首先要進行變量替換,即把$str1換成空格,然后shell又將命令行上的空格刪除,故test命令測試到的為空串 。而在第二次測試中,變量替換后空格位于括號內(nèi),故不會被刪除,test測試到的是一個包含空格的串,在第三次測試中,shell把空格刪除,只把-n傳個test命令,所以顯示參數(shù)錯 。2>測試兩個整數(shù)之間關(guān)系test命令與expr命令一樣,也可以把字符轉(zhuǎn)變成整數(shù),然后對其操作 。test命令對兩個數(shù)進行比較,使用的操作符如下:int1 -eq int2兩數(shù)相等為真

推薦閱讀