在Shell中使用數(shù)據(jù)變量 用戶可以在Shell中使用數(shù)據(jù)變量,例如ba.sh程序:cd/usr/icewalk ls|cpio -o > /dev/fd0該程序中要備份的目錄為一常量,即該程序只能用來備份一個(gè)目錄 。若在該程序中使。中 Unix系列shell程序編寫。" />

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

中 Unix系列shell程序編寫


3>在Shell中使用數(shù)據(jù)變量
用戶可以在Shell中使用數(shù)據(jù)變量,例如ba.sh程序:cd/usr/icewalk
ls|cpio -o > /dev/fd0該程序中要備份的目錄為一常量,即該程序只能用來備份一個(gè)目錄 。若在該程序中使用變量,則會使其更通用:workdir=$1
cd $workdir
ls * |cpio -o > /dev/fd0通過這一改變,用戶可以使用程序備份變量$workdir指定的目錄 。例如我們要備份/home/www的內(nèi)容,只要運(yùn)行ba.sh /home/www即可實(shí)現(xiàn) 。(若不明白 $1,下面將詳細(xì)介紹shell參數(shù)的傳遞,$1代表本sh程序-ba.sh的第一個(gè)參數(shù))4>在Shell程序中加上注釋為了增加程序的可讀性,我們提倡加入注釋 。在Shell程序中注釋將以"#"號開始 。當(dāng)Shell解釋到"#"時(shí),會認(rèn)為從"#"號起一直到該行行尾為注釋 。5>對Shell變量進(jìn)行算術(shù)運(yùn)算高級語言中變量是具有類型的,即變量將被限制為某一數(shù)據(jù)類型,如整數(shù)或字符類型 。Shell變量通常按字符進(jìn)行存儲,為了對Shell變量進(jìn)行算術(shù)運(yùn)算,必須使用expr命令 。expr命令將把一個(gè)算術(shù)表達(dá)式作為參數(shù),通常形式如下:expr [數(shù)字] [操作符] [數(shù)字]由于Shell是按字符形式存儲變量的,所以用戶必須保證參加算術(shù)運(yùn)算的操作數(shù)必須為數(shù)值 。下面是有效的算術(shù)操作符:兩個(gè)整數(shù)相加
- 第一個(gè)數(shù)減去第二個(gè)數(shù)
* 兩整數(shù)相乘
/ 第一個(gè)整數(shù)除以第二個(gè)整數(shù)
% 兩整數(shù)相除,取余數(shù)
例如:
$expr 21
結(jié)果顯示:3
$expr 5 - 3
結(jié)果顯示:2若expr的一個(gè)參數(shù)是變量,那么在表達(dá)式計(jì)算之前用變量值替換變量名 。
$int=3
$expr $int4
結(jié)果顯示:7
用戶不能單純使用"*"做乘法,若輸入:
$expr 4*5
系統(tǒng)將會報(bào)錯(cuò),因?yàn)镾hell看到"*"將會首先進(jìn)行文件名替換 。正確形式為:
$expr 4 * 5
結(jié)果顯示:20
多個(gè)算術(shù)表達(dá)式可以組合在一起,例如:
$expr 57 / 3
結(jié)果顯示:7
運(yùn)算次序是先乘除后加減,若要改變運(yùn)算次序,必須使用"`"號,如:
$int=`expr 57`
$expr $int/3
結(jié)果顯示:4
或者:
$expr `expr 5 7`/3
結(jié)果顯示:46>向Shell程序傳遞參數(shù)一個(gè)程序可以使用兩種方法獲得輸入數(shù)據(jù) 。一是執(zhí)行時(shí)使用參數(shù) 。另一種方法是交互式地獲得數(shù)據(jù) 。vi編輯程序可以通過交互式的方法獲得數(shù)據(jù),而ls和expr則從參數(shù)中取得數(shù)據(jù) 。以上兩種方法Shell程序都可以使用 。在"交互式讀入數(shù)據(jù)"一節(jié)中將介紹Shell程序通過交互式的方法獲得參數(shù) 。通過命令行給Shell程序傳遞參數(shù)可以擴(kuò)大程序的用途 。以前面提到的ba.sh程序?yàn)槔?
$cat >re.sh
cd $workdir
cpio -i < /dev/fd0
^d程序re.sh恢復(fù)了ba.sh程序備份的所有文件 。若只從軟盤上恢復(fù)一個(gè)指定的文件,可以用該文件名作為參數(shù),傳遞給Shell程序re.sh:程序改寫如下:
$cat >re2.sh
cd $workdir
cpio -i $1 < /dev/fd0
^d用戶可以指定要恢復(fù)的文件,例如fname$re2.sh fname此時(shí)文件fname作為第一個(gè)位置參數(shù)傳遞給re2.sh,re2.sh的缺點(diǎn)是要恢復(fù)兩個(gè)或多個(gè)文件要重復(fù)運(yùn)行,我們可以用$*變量傳遞不確定的參數(shù)給程序:$cat >re3.sh
cd $workdir
cpio -i $* < /dev/fd0
^d我們就可以恢復(fù)多個(gè)文件,例如fname1,fname2,fname3
$re3.sh fname1 fname2 fname3
(以上程序re.sh,re2.sh,re3.sh,假設(shè)用戶已經(jīng)chmod了可執(zhí)行權(quán)利)因?yàn)闆]有賦值的變量可以作為NULL看待,所以若是程序re3.sh在執(zhí)行時(shí)候沒賦予參數(shù),那么一個(gè)空值將被插入到cpio命令中 。該命令將恢復(fù)所有保存的文件 。

條件判斷語句條件判斷語句是程序設(shè)計(jì)語言中十分重要的語句,該語句的含義是當(dāng)某一條件滿足時(shí),執(zhí)行指定的一組命令 。1>if - then語句格式: if command1
then
command2
command3
fi---(if 語句結(jié)束)
command4每個(gè)程序或命令執(zhí)行結(jié)束后都有一個(gè)返回的狀態(tài),用戶可以用Shell變量$?獲得這一狀態(tài) 。if語句檢查前面命令執(zhí)行的返回狀態(tài),若該命令成功執(zhí)行,那么在then和fi之間的命令都將被執(zhí)行 。在上面的命令序列中,command1和command4總要執(zhí)行 。若command1成功執(zhí)行,command2和command3也將執(zhí)行 。請看下面程序:

推薦閱讀