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

UNIX SHELL腳本編程( 二 )

【UNIX SHELL腳本編程】name=Johnreadonly結(jié)果如下: Tom name: is read only readonly name readonly ......4. 特殊變數(shù)有些變數(shù)是一開始執(zhí)行Script時就會設(shè)定,并且不以加以修改,但我們不叫它 唯讀的系統(tǒng)變數(shù),而叫它特殊變數(shù)(有些書會叫它唯讀的系統(tǒng)變數(shù)),因為這 些變數(shù)是一執(zhí)行程式時就有了,況且使用者無法將一般的系統(tǒng)變數(shù)設(shè)定成唯讀 的 。以下是一些等殊變數(shù):$0 這個程式的執(zhí)行名字$n 這個程式的第n個參數(shù)值,n=1..9 $* 這個程式的所有參數(shù)$# 這個程式的參數(shù)個數(shù)$$ 這個程式的PID $! 執(zhí)行上一個背景指令的PID$? 執(zhí)行上一個指令的返回值當(dāng)你執(zhí)行這個程式時的參數(shù)數(shù)目超過9 個時,我們可以使用shift 命令將參數(shù) 往前移一格,如此即可使用第10個以後的參數(shù) 。除此之外,吾人可以用set 命 令改變$n及$*,方法如下:set string 如此$*的值即為string,而分解後則會放入$n 。如果set 命令後面沒有參數(shù),則會列出所有已經(jīng)設(shè)定的變數(shù)以及其值 。檔名:ex1 參數(shù):this is a testecho Filename: $0echo Arguments: $*echo No. of args.: $#echo 2nd arg.: $2shiftecho No. of args.: $#echo 2nd arg.: $2set hello, everyoneecho Arguments: $*echo 2nd arg.: $2結(jié)果如下:Filename: ex1Arguments: this is a test No. of args.: 42nd arg.: isNo. of args.: 32nd arg.: aArguments: hello, everyone2nd arg.: everyone值得一提的是,當(dāng)你想從鍵盤輸入一變數(shù)值時,你可以使用下面的命令:read var1 var2..... 這時read會將一個字分給一個變數(shù) 。如果輸入的字比變數(shù)還多,最後一個變數(shù)會將 剩下的字當(dāng)成其值 。如果輸入的字比變數(shù)還少,則後面的變數(shù)會設(shè)成空字串 。如果需要處理數(shù)值運(yùn)算,我們可以使用expr命令 。其參數(shù)及輸出列於附錄A 。二、執(zhí)行命令在Bourne Shell中有五種方法執(zhí)行一個命令,而這五種方式所產(chǎn)生的果有些許的不 同 。1. 直接下命令 這個方式和在命令列中直接下命令的效果一樣 。2. 使用sh命令 sh command 這個檔案必須是Bourne Shell的Script,但這個檔案并不一定要設(shè)成可執(zhí)行 。除此之外和直接下命令的方式一樣 。3. 使用"."命令 . command 這時和使用sh命令相似,只不過它不像sh一般會產(chǎn)生新的process,相反地,它會在原有的process 下完成工作 。4. 使用exec命令 exec command 此時這個Script將會被所執(zhí)行的命令所取代 。當(dāng)這個命令執(zhí)行完畢之後,這個 Script也會隨之結(jié)束 。5. 使用命令替換 這是一個相當(dāng)有用的方法 。如果想要使某個命令的輸出成為另一個命令的參數(shù) 時,就一定要使用這個方法 。我們將命令列於兩個"`" 號之間,而Shell 會以 這個命令執(zhí)行後的輸出結(jié)果代替這個命令以及兩個"`" 符號 。str="Current Directory is "`pwd` echo $str結(jié)果如下:Current directory is /users/cc/mgtsai這個意思是pwd 這個命令輸出"/users/cc/mgtsai",而後整個字串代替原 來的`pwd` 設(shè)定str 變數(shù),所以str 變數(shù)的內(nèi)容則會有pwd 命令的輸出 。number=`expr $number1` 這就是先前所提要作數(shù)值運(yùn)算的方法,基本上expr命令只將運(yùn)算式解,而 後輸出到標(biāo)準(zhǔn)輸出上 。如果要將某變數(shù)設(shè)定成其值,非得靠命令替換的方 式不可 。這個例子是將number變數(shù)的值加1 後再存回number變數(shù) 。三、流程控制 在介紹流程控制之前,我們先來看看test命令 。test命令的參數(shù)是條件判斷式,當(dāng) 條件為真時則傳回非零值,而條件為偽時則傳回零 。在所有的流程控制都必須用到 test命令來判斷真?zhèn)?。而test命令的使用方法則列於附錄B 。test $# = 0 如果執(zhí)行這個程式?jīng)]有參數(shù)時,會傳回非零值代表"$# = 0"這個條件成立 。反 之則會傳回零 。以下介紹各種流程控制:1. if then 語法以及流程圖如下 語法以及流程圖如下if(condition)thenthen-commandsficondition 是一個test命令 。往後所介紹的各種流程中的condition 都是test 命令 。檔名:chkargif(test$#!=0)thenecho Arg1:$1fi$ chkarg HelloArg1: Hello$ chkarg $2. if then else 語法以及流程圖如下if(condition)thenthen-commandselseelse-commandsfi3. if then elif 語法以及流程圖如下if(condition1)thencommands1elif(condition2)thencommands2elsecommands3fiecho "Word 1: c"read word1echo "word 2: c"read word2echo "word 3: c"read word3if (test "$word1" = "$word2" -a "$word2" = "$word3")thenecho "Match: words 1, 2, & 3"elif (test "$word1" = "$word2")thenecho "Match: words 1 & 2"elif (test "$word1" = "$word3")then echo "Match: words 1 & 3"elif (test "$word2" = "$word3")thenecho "Match: words 2 & 3"elseecho "No match"fi4. for in 語法以及流程圖如下for var in arg-listdocommandsdonefor a in xx yy zzdoecho $adone結(jié)果如下:xx yy yy zz5. for 語法以及流程圖如下for vardo commandsdone檔名:lstargfor adoecho $adone$lstarg xx yy zzxx yy yy zz6. while 語法以及流程圖如下while (condition)docommandsdonenumber=0while (test $number -lt 10)doecho "$numberc"number=`expr $number1`doneecho結(jié)果如下: 01234567897. until 語法以及流程圖如下until (condition)docommandsdone它和while 的不同只在於while 是在條件為真時執(zhí)行回圈,而until 是在條件 為假時執(zhí)行回圈 。8. break及continue 這兩者是用於for, while, until 等回圈控制下 。break 會跳至done後方執(zhí)行,而continue會跳至done執(zhí)行,繼續(xù)執(zhí)行回圈 。9. case 語法以及流程圖如下case str inpat1) commands1;;pat2) commands2;;pat3) commands3;;esac而pat 除了可以指定一些確定的字串,也可以指定字串的集合,如下* 任意字串? 任意字元[abc] a, b, 或c三字元其中之一[a-n] 從a到n的任一字元| 多重選擇echo "Enter A, B, or C: c"read lettercase $letter inA|a) echo "You entered A.";;B|b) echo "You entered B.";;C|c) echo "You entered C.";;*) echo "Not A, B, or C";;esac10. 函數(shù) 格式如下 function-name() { commands } 而要呼叫此函數(shù),就像在命令列下直接下命令一般 ?!魿 Shell C Shell 有些特性和Bourne Shell一樣,但有些不相同 。這里介紹與Bourne Shell 不相同的地方 。一、變數(shù)1. 字串變數(shù) 這個部分和Bourne Shell的變數(shù)一樣,只不過在設(shè)定變數(shù)值時不能使用Bourne Shell的方式,而必須打:set var=value2. 數(shù)字運(yùn)算 基本上C Shell 沒有數(shù)字變數(shù),但C Shell 卻有簡單的方法處理數(shù)字運(yùn)算:@ var operator expressionoperator可以是C 語言中的=,=, -=,......,而expression則是運(yùn)算式 。運(yùn) 算式的運(yùn)算子如下:A. () 改變計算的順序 ~@B. ~ 位元NOT運(yùn)算 @~~ ! 邏輯否定C. % 取馀數(shù) C. % 取馀數(shù) / 除 * 乘 - 減加D. >> 右移

推薦閱讀