




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、AgKi#iEEw muxGBourne Shell 及 shell 編程版權(quán)信息:作者:A文章出處:黃嘴企鵝論壇javalee轉(zhuǎn)貼文檔制作:拒絕正版作者聲明:本文內(nèi)容為大連理工大學(xué)LINUX選修課講義.歡迎大家轉(zhuǎn)載,但禁止使用本材料進行 任何商業(yè)性或贏利性活動。轉(zhuǎn)載時請保留本版權(quán)聲明。作者:何斌武.hbwork,;連理工大學(xué)網(wǎng)絡(luò)中心,April 1999.URL: ftD:/ft0dluLedu-cn/Dub/PEOPLE/albin/源碼:Bourne Shell介紹:Bourne Shell基礎(chǔ)及其他很多有用的特性,shell編程及組
2、織。主要內(nèi)容:shell基礎(chǔ)基本介紹.環(huán)境,選項,特殊字符一shell變量用戶定義變量.壞境變量.位萱變量(shell參數(shù)).shell script 編程條件測試.循環(huán)及重復(fù)控制.shell定制1. shell基礎(chǔ)知識作者:Stephen Bourne在Bell實驗室開發(fā)建議:man sh查看相關(guān)UNIX 的改進或特性(1) shell提示符及其壞境/etc/passwd 文件提示符:$/etc/profile $HOME/.profile(2) shell執(zhí)行選項-n 測試shell script語法結(jié)構(gòu),只讀取shell script但不執(zhí)行-X 進入跟蹤方式,顯示所執(zhí)行的每一條命令,用
3、于調(diào)度-a Tag all variables for export-c string從strings中讀取命令-e非交互方式-f 關(guān)閉shell文件名產(chǎn)生功能h locate and remember functions as defind-i交互方式-k從環(huán)境變量中讀取命令的參數(shù)-r限制方式-s從標(biāo)準輸入讀取命令-t執(zhí)行命令后退岀(shell exits)-u在替換中如使用未定義變量為錯誤-v verbose,顯示shell輸入行這些選項可以聯(lián)合使用.但有些顯然相互沖突,如-e和-L(3) 受限制 shell(Restircted Shell)sh -r 或 /bin/rsh不能執(zhí)行如下操
4、作:cd,更改PATH,指定全路徑名.輸岀重定向.因此 可以提供一個較好的控制和安全機制.通常sh用于應(yīng)用型用戶及撥號用戶.這些用戶 通常是看不到提示符的。通常受限制用戶的主目錄是不可寫的。不足:如果用戶可以調(diào)用sh,則sh的限制將不在起作用,事實上如果 用戶在vi及more程序中調(diào)用shell,而這時rsh的限制將不再起作用。(4) 用set改變shell選項用戶可以在$提示符下用set命令來設(shè)置或取消shell的選項。使用-設(shè)置 選項.+取消相應(yīng)選項.大多數(shù)UNIX系統(tǒng)允許a,e,f,h,k,nuv和x的開關(guān)設(shè)置/取消。set -xv啟動跟蹤方式;顯示所有的命令及替換.同樣顯示輸入。set
5、 -tu關(guān)閉在替換時對未定義變量的檢查。使用echo $-顯示所有已設(shè)置的shell選項。(5) 用戶啟動文件.profilePATH=$PATH:/usr/loacl/bin; export PATH(6) shell環(huán)境變CDPATH用于cd命令的查找路徑HOME/etc/passwd文件中列出的用戶主目錄IFS Internal Field Separator,默認為空格,tab 及換行符w 旳MAILPATH/var/mail/$USERNAMEmail 等程序使用PS1. PS2裁認提示符($)及換行提示符( )TERM終端類型.常用的有vt100,ansi,vt200,xterm等
6、示例:$PS1=test:H;export PS1test: PS 仁,f$M;export PS1$echo $MAIL/var/mail/usemame(7) 保留字符及其含義$ shell變量名的開始.如$va| 管道.將標(biāo)準輸岀轉(zhuǎn)到下一個命令的標(biāo)準輸入& 在后臺執(zhí)行一個進程:匹配Q到多個字符(與dos不同可在文件名中間使用并且含j$- 使用set及執(zhí)行時傳遞給shell的標(biāo)志位$!最后一個子進程的進程號$# 傳遞給shell script的參數(shù)個數(shù)$* 傳遞給shell script的參數(shù)$所有參數(shù).個別的用雙引號括起來$?上一個命令的返回代碼$0 當(dāng)前shell的名字$n (nl)位
7、置參數(shù)$進程標(biāo)識號(Process Identifier Number, PID)file輸岀重定向 filelistIs filelistwc -I v filelistwc -I filelistsleep ; GhQ 乂災(zāi)8加 reaches; Is -Ifind / -name core -exec rm ; &2. shell 變量變量:代表某些值的符號.如$HOME,cd命令查找$HOME,在計算機語言 中可以使用變量可以進行多種運算和控制。Bourne Shell有如下四種變量:用戶自定義變量位置變量即shell script之參數(shù)預(yù)定義變量(特殊變量)壞境變量(參考shell定
8、制部分)(1)用戶自定義變量(數(shù)據(jù)的存儲)$ COUNT=1$ NAME二”He Binwu”技巧:因為大部分UNIX命令使用小寫字符.因此在shell編程中通常 使用全大寫變量.當(dāng)然這并不是強制性的,但使用大寫字符可以在編程中方便地識別 變量.變最的調(diào)用:在變量前加$ echo $HOME/home/hbwork$ WEEK二Satur$ echo Today is $WEEKdayToday is$echo Today is $WEEKdayToday is SaturdayShell變量賦值從右從左進行(Linux Shell/bash從左向右賦值!)$ x=$Y Y=y$ echo $
9、X斗y$ Z=z Y=$Z$ echo $Y$使用unset命令刪除變量的賦值$ Z=hello$ echo $Zhello$ unset Z$ echo $Z$有條件的命令替換在Bourne Shell中可以使變量替換在特定條件下執(zhí)行.即有條件 的環(huán)境變量替換C這種變量替換總是用大括號括起來的。設(shè)置變量的默認值在變量未賦值之前其值為空。Bourne Shell允許對變量設(shè)置 裁認值,其格式如下:$variable:-defaultvalue例:$ echo Hello $UNAMEHello$ echo Hello $UNAME:-thereHello there$ echo $UNAME
10、#變量值并未發(fā)生變化$ UNAME=hbwork$ echo Hello $UNAME:-thereHello hbwork$另一種情況:改變變量的值,格式如下:$variable:=value例:$ echo Hello $UNAMEHello$ echo Hello $UNAME:=thereHello thereAgOiiiefi血 T$ echo $UNAME#變量值并未發(fā)生變化there$變量替換中使用命令替換$USERDIR=$MYDIR:-pwd-在變量已賦值時進行替換$variable:+value帶有錯誤檢查的有條件變量替換$variable:?value例:$ UNAME=
11、$ echo $UNAME:?UNAME has not been setUNAME: UNAME has not been set$ echo $UNAME:? UNAME: parameter null or not set(2) 位置變量(Shell參數(shù))在shell script中位萱參數(shù)可用$1.$9表示.$0表示內(nèi)容通常為當(dāng)前執(zhí)行 程序的文件名。.防止變量值被替換readonly variable使用export命令輸岀變量,使得變量對子shell可用,當(dāng)shell執(zhí)行一下 程序時,shell將為其設(shè)置一個新的壞境讓其執(zhí)行,這稱之了 subshell.在Bourne Sh ell中
12、變量通常被認為是本地變量也就是說在對其賦值之外的shell環(huán)境之外是不認識 此變量的。使用 export 對 subshell 可用。例:對變PS1的export操作.shell的提示符將發(fā)生變化。$ PS仁hostname$peony$sh$ echo $PS1$ v-輸岀結(jié)果$ exitpeony$export PS1peony$shpeony$ echo $PS1peony$ v-輸出結(jié)果peony$3.Shell Script 編程曰的:使用UNIX所提供的巌常用工具來完成所需復(fù)雜任務(wù)的強大功能。60伙喚諭(1) 最簡單的Shell編程$ls -R / |grep myname |mo
13、re每天數(shù)據(jù)的備份:$ cd /usr/yourname; Is * |cpio -o /dev/rmt/Oh書寫程序的目的是一次編程.多次使用(執(zhí)行)!$ cat backup.shcd /home/hbworkIs w | cpio -o /dev/rmt/OhAD執(zhí)行:$ sh backup.sh或:$ chmod +x backup.sh$ ./backup.sh技巧:在shell scnpt中加入必要的注釋,以便以后閱讀及維護。(2) shell是一個(編程)語言同傳統(tǒng)的編程語言一樣.shell提供了很多特性.這些特性可以使你的sh ell script編程更為有用.如:數(shù)據(jù)變量、參
14、數(shù)傳遞、判斷、流程控制、數(shù)據(jù)輸入和 輸出.子程序及以中斷處理等。.在shell編程中使用數(shù)據(jù)變量可以將程序變量更為通用.如在上面back up.sh 中:cd $WORKDIRIs * | cpio -o /dev/rmt/Oh.Shell編程中的注釋以#開頭.對shell變量進行數(shù)字運算.使用exp命令expr integer operator integer其中operator為+* / %,但對的使用要用轉(zhuǎn)義符如:$expr 4 * 520$int= expr 5 + 7$echo $int127w 噪3xG(3) Shell編程的參數(shù)傳遞,可通過命令行參數(shù)以及交互式輸入變量(read)
15、_restoreall.sh對backup.sh程序的備份磁帶進行恢復(fù)$cat restoreall.sh cd $WORKDIRcpio -i v /dev/rmt/OhADrestore 1 .sh只能恢復(fù)一個文件#restore 1 -program to restore a single file cd $WORKDIRcpio -i $i v /dev/rmt/Oh$restore1 filel恢復(fù)多個文件restoreany :#restoreany -program to restore a single file cd $WORKDIRcpio -i v /dev/rmt/Oh
16、$ restoreany filel file2 file3條件判斷.if-then語句,格式如下:if command_1thencomma nd_2command_3ficommand_4在if-then語句中使用了命令返回碼$?,即當(dāng)command_1執(zhí)行成功時才執(zhí) 行 command_2 和command_3,而 command_4 總是執(zhí)行.示例程序unload:在備份成功時刪除原始文件,帶有錯誤檢查cd $1#備份時未考慮不成功的情況!Is -a | cpio -o /dev/rmt/Ohrm -rf w改進如下8ASKiiEw如血欣證com#當(dāng)使用了管道命令時,管理命令的返回代碼
17、為謚后一個命令的返 回代碼if Is -a | cpio -o /dev/rmt/Ohthenrm -rf *if-then-else 語句 if command_1 thencommand_2 elsecommand_3技巧:由于shell對命令中的多余的空格不作任何處理,一個好的程 序員會用這一特性對自己的程序采用統(tǒng)一的縮進格式,以增強自己程序的可讀性.使用test命令進行進行條件測試格式:test conditionstest在以下四種情況下使用:a.字符比較b.兩個整數(shù)值的比較c. 文件操作,如文件是否存在及文件的狀態(tài)等d. 邏輯操作,可以進行and/or,與其他條件聯(lián)合使用測試字符數(shù)
18、據(jù)shell變量通常民政部下均作為字符變量str1 = str2二者相長,相同str1 != str2個同-n stringstring不為空(長度不為零)-z stringstring為空stringstring不為空例:$ sti仁abed確含有空格時必須用引號括起來$ test $stM 二abed$ echo $?0$ str仁“abed ”$ test $str1 =abcd $ echo $?AgtKiEEw 醺Note:在test處理含有空格的變量時最好用引號將變量括起來,否 則會岀現(xiàn)錯誤的結(jié)果,因為shell在處理命令行時將會去掉多余的空格,而用引號括 起來則可以防止shell
19、去掉這些空格.例:$ str1 =$ test $str1$ echo $?1$ test $str1$ echo $?0$ test -n $str1test: argument expected$ test -n SstrV$ echo $?0$III b.整數(shù)測試:test與expr相同,可以將字符型變量轉(zhuǎn)換為整數(shù)進行操 作,expr進行整數(shù)的算術(shù)運算,而test則進行邏輯運算.inti -eq int2相等?inti -ne int2不等?inti -gt int2inti int2 ?inti -ge int2inti = int2 ?inti -It int2inti int2 ?
20、inti -le int2inti empty$ test -r empty$ echo $?0$ test -s empty1$ test ! -s empty$ echo $?0e. 測試條件之邏輯運算-aAnd-oOr例:$ test -r empty -a -s empty$ echo $?1f. 進行test測試的標(biāo)準方法因為test命令在shell編程中占有很重要的地位,為了使shell能 同其他編程語言樣便于閱讀和組織,Bourne Shell在使用test測試時使用了另一種方法:用方括號將整個test測試括起來:$ int1=4$ $int1 -gt 2 $ echo $?0例
21、:重寫unload程序,使用test測試 #!/bin/sh#unload program to backup and remove files#syntax: unload directory#check argumentsif $# -ne 1 thenecho usage】$0 directory”exit 1fi#check for valid directory nameif ! -d $1thenecho ,f$1 is not a directory*exit 2ficd $1Is -a | cpio -o /dev/rmt/0hif $? -eq 0 thenrm -rf *e
22、lseecho ”A problem has occured in creating backup1echo The directory will not be ereasedMecho Please check the backup device” exit 3fi# end of unload在如上示例中出現(xiàn)了 exit, exit有兩個作用:一是停止程序中其他命令的執(zhí)行,二是設(shè)置程序的退岀狀態(tài)g- if嵌套及elif結(jié)構(gòu)if comma ndthencomma ndelseif commandthencomcommandelseif command thencommandfififi改進
23、使用elif結(jié)構(gòu)if commandthencomma ndelif commandthencommandelif commandthencommandfielif結(jié)構(gòu)同if結(jié)構(gòu)類似,但結(jié)構(gòu)更清淅,其執(zhí)行結(jié)果完全相同.抱歉.為了格式不亂我用代碼模式粘貼全文/源碼:Bourne Shell 及 Shell 編程(2) n交互式從鍵盤讀入數(shù)據(jù) 使用ead語句.其格式如下:read var1 var2 .varnead將不作變量替換,但會刪除多余的空格,直到遇到第一個換 行符(回車).并將輸入值依次賦值給相應(yīng)的變量,例:$ read var1 var2 var3Hello my friendsAgO
24、iiiEEw 如lbuxG$ echo $var1 $var2 $var3Hello my trie nds$ echo $var1Hello$ read var1 var2 var3Hello my dear friends$ echo $var3dear friendsv輸入多余變量時.輸入值余下的內(nèi)容賦給最后一個變量$ read var1 var2 var3Hello friends$ echo $var3-var3為空$在shell script中可使用read語句進行交互操作:#echo -n message輸岀結(jié)果后不換行echo n MDo you want to continu
25、e: Y or NH read ANSWERif $ANSWER二N -o $ANSWER=n thenexitfii. case結(jié)構(gòu):結(jié)構(gòu)較elif-then結(jié)構(gòu)更清楚比較if-then語句:if variablel = valuel thencommandcommandelif variablel = value2 thencommandcommandelif variablel = value3 thencommandcommandfi耳風(fēng)B正挈lEEwww.lipuxsiccom相應(yīng)的case結(jié)構(gòu):case value inpattern 1) command command;patt
26、ern2) comma nd command;patternn) command;esac* case語句只執(zhí)行第一個匹配模式例:使用case語句建立一個菜單選擇shell script #Display a menu echo _echo M1 Restore1* echo M2 Backup echo M3 Unload echo#Read and excute the users selectionecho -n Enter Choiceread CHOICEcase $CHOICEW in1) echoRestore:;2) echoBackup:;3) echoUnload;*)ec
27、hoSorry $CHOICE is not a valid choiceexit 1esac在上例中節(jié)旨默認匹配動作。此外.case模式中也可以使用邏輯 操作.如下所示pattern 1 | pattern2 ) command comma nd ;耳網(wǎng)正單iEEww.lffiuxsirxom這樣可以將上面示例程序中允許用戶輸入數(shù)字或每一個大寫字母case M$CHOICEM in1|R)echoRestore;2|B)echoBackup”;;3|U)echoUnload;*)echoMSorry $CHOICE is not a valid choiceexit 1esac循環(huán)控制 wh
28、ile 循環(huán):格式:while comma nddocomma ndcommandcommanddone例:計算1到5的平方#!/bin/sh#Filename: square.shint=1while Sint -le 5 dosq= expr $int * $int*echo $sqint=expr $int + rdoneecho Job completedM$ sh square.sh14916 25Job completed until循環(huán)結(jié)構(gòu):格式:until commanddocomma ndcommandcomma nddone示例:使用until結(jié)構(gòu)計算1-5的平方#!/bi
29、n/sh int=1until $int -gt 5 dosq=expr $int * $infecho $sqint=expr $int + Vdoneecho ”Job completed”使用shift對不定長的參數(shù)進行處理在以上的示例中我們總是假設(shè)命令行參數(shù)唯一或其個數(shù)固定或者使用狎?qū)⒄麄€命令行參數(shù)傳遞給shell script進行處理對于參數(shù)個數(shù)不固定并且希望對每個命令參數(shù)進行單獨處理時則需要Shift命令。使用shift可以將命令行位置參數(shù)依次移動位置即$2-$1, $3-$2.在移位之前的第一個位置參數(shù)$1在移位后將不在存在C示例如下:#!/bin/sh#Filename: sh
30、ifteruntil $# -eq 0 doecho wArgument is $1 and expr $# - T argument(s) re mainshiftdone$ shifter 12 3 4Argument is 1and 3 argument(s) remainArgument is 2 and 2argument(s)remainArgument is 3 and 1argument(s) remainArgument is 4 and 0argume nt(s)remain使用shift時.每進行一次移位.$#減仁 使用這一特性可以用u ntil循環(huán)對每個參數(shù)進行處理.如
31、下示例中是一個求整數(shù)和的shell script:# !/bin/sh# sumints - a program to sum a senes of integers#if $# -eq 0 thenecho ”Usage: sumints integer listexit 1fisum=0until $# -eq 0 dosum=expr $sum + $rshiftdoneecho $sum$ sh sumints 324 34 34 12 34 438$AsOiKSiEfi爨 T使用shift的另一個原因是Bourne Shell的位置參數(shù)變量為$1$9, 因此通過位置變量只能訪問前9個
32、參數(shù)。但這并不等干在命令行上謚多只能輸入9個參數(shù)。此時如果想訪問前9個參數(shù)之后的參數(shù),就必須使用shift.另外shift后可加整數(shù)進行一次多個移位,如:shift 3. for 循環(huán)格式:for var in arg1 arg2 . argndocomma ndcommanddone示例:$ for letter in a b c d e; do echo $letter;doneab對當(dāng)前目錄下的所有文件操作:$ for i in *doif -f $i thenecho *$i is a fileelif -d $i echo M$i is a directory fidone求命令行上
33、所有整數(shù)之和:#!/bin/shAgtKiEEw如證comsum=0for I NT in $*dosum二 expr $sum + $INT doneecho $sum從循壞中退岀:break和continue命令 break立即退出循環(huán)continue忽略本循環(huán)中的其他命令.繼續(xù)下一下循環(huán)在shell編程中有時我們要用到進行無限循環(huán)的技巧,也就是說這 種循環(huán)一直執(zhí)行碰到break或continue命令。這種無限循環(huán)通常是使用true或false 命令開始的。UNIX系統(tǒng)中的tue總是返加0值.而false則返回非零值。如下所示:#一直執(zhí)行到程序執(zhí)行了 break或用戶強行中斷時才結(jié)束循壞
34、while truedocomma ndcommanddone上面所示的循環(huán)也可以使用until false,如下:until falsedocomma ndcomma nddone在如下shell script中同時使用了 continue,break以及case語句中 的正規(guī)表達式用法:#!/bin/sh# Interactive program to restore, backup, or unload# a directoryecho Welcome to the menu driven Archive program” while true do# Display aMenuecho
35、echo ”Make a Choice from the Menu below”echo _echo 1Restore Archiveecho 2Backup directory0echo H3Unload directory1*echo 4Quitecho# Read the users selectionecho n Enter Choice: wread CHOICEcase $CHOICE in1-3 ) echo# Read and validate the name of the di rectoryecho -n What directory do you want? 11rea
36、d WORKDIRif !d M$WORKDIRthen echo Sony SWORKDIR is not a director y”continueftectory# Make the directory the current working dir cd $WORKDIR;4) :;#為空語句.不執(zhí)行任何動作*) echo nSorry, $CHOICE is not a valid choice con tinueesaccase $CHOICEM in1) echo ”Restoring” cpio -i /dev/rmt/0h;3) echo Unloading.Is | cpi
37、o -o /dev/rmt/0h;4) echo Quitting break;esac#Check for cpio errorsif $? -ne 0 thenecho MA problem has occurred during the process11 if $CHOICE = 3 thenecho The directory will not be erased1*fiecho Please check the device and try again” continueelseif $CHOICE = 3 thenrm *fifidone(6)結(jié)構(gòu)化編程:定義函數(shù)同其他高級語言一
38、樣.shell也提供了函數(shù)功能、函數(shù)通常也稱之為子過 程(subouti ne)其定義格式如下:wifiy. duuircomfuncn ame()commandcommand; # 分號定義函數(shù)之后,可以在shell中對此函數(shù)進行調(diào)用.使用函數(shù)定義可以將 一個復(fù)雜的程序分為多個可管理的程序段.如下所示:# start programsetup () command list ; do_data () command list ; cleanup () comma nd list ; errors () command list ; setupdo_dataclea nup# end prog
39、ram技巧:.在對函數(shù)命名時最好能使用有含義的名字.即函數(shù)名能夠比較準 確的描述函數(shù)所完成的任務(wù)。.為了程序的維護方便.請盡可能使用注釋使用函數(shù)的另一個好處就是可以在一個程序中的不同地方執(zhí)行相同的 命令序列(函數(shù)),如下所示:iscontinue()AftKiEEw 欝muxsirxomwhile truedoecho -n Continue?(丫/N)read ANSWERcase $ANSWER inYy)return 0;Nn)return 1;冷 echo HAnswer Y or N11;esacdone這樣可以在shell編程中調(diào)用iscontinue確定是否繼續(xù)執(zhí)行:if isc
40、ontinuethencon tinueelsebreakfishell函數(shù)與shell程序非常相似.但二者有一個非常重要的差別:she II程序是由子shell執(zhí)行的,而shell函數(shù)則是作為當(dāng)前shell的一部分被執(zhí)行的,因此在 當(dāng)前shell中可以改變函數(shù)的定義此外在任意shell(包括交互式的shell)中均可定義函數(shù). 如:$ dir dir: not found $ dir () Is -I ;$ dirtotal 5875-rw-r-r- -rw-r- 一 -rw-rr -rw-r-r-1 hbwork1 hbwork1 hbwork1 hbwork100 Nov 10 23:1
41、6 doc2973806 Nov 10 23:47 ns40docs.zip1715011 Nov 10 23:30 ns840usr.pdf1273409Sep231998 radsol21b6.tar.-rw-rr1 hbwork7526Nov10 23:47 wget-logZAgOiiiefi-rw-rr 1 hbwork1748 Nov 13 21:51 wget-log.1$ unset dir$ dir () echo Permission Link Owner Group File_SZ LastAccess FileNameH echo Mw Is -I $*;$ dirPe
42、rmission Link Owner Group File_SZ LastAccess FileNametotal 5875-rw-r-r-1 hbwork100 Nov 10 23:16 doc-rw-r-r-1 hbwork2973806 Nov10 23:47 ns40docs.zip-rw-r-r-1 hbwork1715011 Nov10 23:30 ns840usr.pdf26-rw-r-r1hbworkar.Z-rw-rr-1hbwork rw-r-r-1hbwork1273409 Sep 23 1998 radsol21b6.t7526 Nov 10 23:47 wget-l
43、og1748 Nov 13 21:51 wget-log. 1通常情況下.shell script是在子shell中執(zhí)行的.困此在此子shell中 對變量所作的修改對父shell不起作用。點(J命令使用shell在不創(chuàng)建子shell而由 當(dāng)前shell讀取并執(zhí)行一個shell script,可以通過這種方式來定義函數(shù)及變量。此外 點(J命令最常用的功能就是通過讀取profile來重新配萱初始化login變量 如下 所示:$ . profile(csh相對于命令的是source命令).使用And/O結(jié)構(gòu)進行有條件的命令執(zhí)行 And ,僅當(dāng)?shù)谝粋€命令成功時才有執(zhí)行后一個命令,如同在邏輯與表 達式中
44、如果前面的結(jié)果為真時才有必要繼續(xù)運算.否則結(jié)果肯定為假。格式如下:commandl & command2AgOiiefi例:rm $TEMPDIR/* & echo ”File successfully removed11 等價于if rm $TEMPDIR/*thenecho ”File successfully removed11fiOr,與AND相反.僅當(dāng)前一個命令執(zhí)行岀錯時才執(zhí)行后一條命令 例:rrn $TEMPDIR/* | echo File not removed等價務(wù)if rm $TEMPDIR/*thencomma ndelseecho File not removedfi混
45、合命令條件執(zhí)行commandl & command2 & command3當(dāng) commandl, command2 成功時才執(zhí)行 command3 commandl & command2 | comamnd3僅當(dāng)commandl成功.command2失敗時才執(zhí)行command3 當(dāng)然可以根據(jù)自己的需要進行多種條件命令的組合.在此不多講述(8)使用getopts命令讀取unix格式選項一、UNIX格式選項指如下格式的命令行參數(shù):command -options parameters使用格式:getopts option_string variable具體使用方法請參考getopts的在線文檔(m
46、an getopts).示例如下:aiueuaiy a- ja6ajui o- a)eoi|dnp :xejuAs #PMB-p q- e-r-$LC uepUO|/| ejepMQu $ IC uepUO|/| ejep/wau $ 比0P6 0)ep/vau $U QUOp oesa-.NOIldO$ uoijdo piieAUi. oqoe (cOHJR Nd-llV #*. J%+.邨p (JuoijeiAejqqe 屮uog # 爲(wèi) q%+. e)ep uoijeiAejqqe Aea # 二.e%+, a)ep 種OM o屮 2 Aea #, M%+| ajepQ)ep ueiin
47、r jibip g #二,%A%+. a)ep(M佗(M(cJeeA jo Aep # !. (%+, 9)ep (fSS IAIZHH #puooes #einuiN #jnoH #AA/aa/riN #西人#屮uow jo Aea #pe人jo屮uow #二丄+ a)ep (1 S%+.邨P (sN%+. 9)ep (* *. H%+. (hO%+.邨P (aA%+. ajep (A P%+. Q)ep (p w%h 邨p (LUNOI丄dO$ Qseo op NOIldO jqeMpfiskMHaApiu sjdo)e6 Q|iqM 0S|9U8屮 L II- #$ j! QjepMOU
48、#IUOOAgKiiEE# where integer is the number of duplicate copies# and -v is the verbose optionCOPIES=1VERBOSE二N while getopts vc: OPTION docase $OPTIONinc) COPIES二$OPTARG;v) VERBOSE二丫;;?) echo Illegal Option* exit 1;esacdoneif $OPTIND -gt $# thenecho No file name specified”exit 2shift %expr $OPTIND -VFILE=$1COPY=0while $COPIES -gt $COPY doCOPY=*expr $COPY + 1* cp $FILE $FILE$COPY if VERBOSE = Y thenecho $FILE$COPYfidone$ duplicate v fileA fileAl$ duplicate -c
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廠房裝飾裝修合同范本
- 加油站收費合同范本
- 凈化燈采購合同范本
- app推廣合作合同范本
- 品牌冠名協(xié)議合同范本
- 南京購房合同范本
- 單日培訓(xùn)勞務(wù)合同范本
- 合同范例定稿流程
- 醫(yī)院咨詢管理合同范本
- 合作代簽合同范本
- 兒童腺樣體肥大治療方案-深度研究
- 2025年懷化職業(yè)技術(shù)學(xué)院單招職業(yè)技能測試題庫必考題
- 2025年第六屆(中小學(xué)組)國家版圖知識競賽測試題庫及答案
- 2025年中國床墊機械行業(yè)市場發(fā)展監(jiān)測及投資戰(zhàn)略咨詢報告
- GB/T 26436-2025禽白血病診斷技術(shù)
- 體育場館工程施工組織設(shè)計
- 春季校園常見傳染病及預(yù)防措施培訓(xùn)課件
- 國際標(biāo)準下的AI技術(shù)應(yīng)用-深度研究
- 2025-2030年城市軌道交通運營行業(yè)深度調(diào)研及發(fā)展戰(zhàn)略咨詢報告
- 教科版六年級下冊科學(xué)全冊教學(xué)設(shè)計教案
- 2025年江西生物科技職業(yè)學(xué)院高職單招職業(yè)技能測試近5年常考版參考題庫含答案解析
評論
0/150
提交評論