|
#1
| ||||
| ||||
| [轉貼] 第九章 Shell Scripts 一. 何謂scripts : 將我們想要執行的一些內容,藉由程式的組合寫入一個檔案中,此檔案就稱之為scripts file。 藉由執行此scripts file,便可得到一連串執行的結果。 Scripts最基本的用法是將命令列上所輸入的連續指令統合於scripts中,只要 執行此scripts就等於執行一連串的指令敘述。 二. 編寫scripts時的習慣做法 1. #!/bin/bash => 宣告使用的shell為bash,此為scripts的第一行敘述。 2. 註明此scripts的用途、簡易描述、作者、建檔日期等等。 3. 最後才開始編寫scripts。 4. 完成後記得將此scripts改成可執行: # chmod 755 scripts 或 # chmod +x scripts,然後才可執行該scripts。 # ./scripts 亦可執行如下: # sh scripts 例. barry$ vi scriptfile #!/bin/bash # scriptfile : test # author : barry # date : 2002.3.10 echo “Hello,everybody.” echo –n “my linux version is : “ uname –r → 編輯好後,存檔離開。然後修改此scriptfile為可執行。 $ chmod +x scriptfile 修改完後就可執行試試。 $ ./scriptfile Hello,everybody. My linux version is : 2.4.18-3 Note : 執行scripts時,會由上至下,由左至右依序執行,但要是遇到迴圈 或函式時,則為例外。 if [ … ] 內,一般只能有一條件判斷式,而[…]與[…]間可用 || 或 && ( or.and ) 做複合式判斷。 三. 判斷式 : 1. 判斷檔案或目錄的運算式 -d dir -f file -r read -w write -x execute -e exist -s size (檔案大小不等於0) -u SUID -g SGID -k sticky bit 例. if [ -f /etc/passwd ];then → 如果passwd是檔案為真,然後就執行…。 2. 判斷數值的運算式 : -eq 等於 -ne 不等於 -gt 大於 -ge 大於等於 -lt 小於 -le 小於等於 -a and -o or 例. $a = 3 –a $b = 5 3. 判斷字串的運算式 : 假設A.B為字串 A = B A != B -z A 如果A是空字串為真,… -n B 如果B非空字串為真,… -a.-o同數值判斷式。 四. if 判斷式 : if…then…elif…then…else…fi 例. a=3 b=5 if [ “$a” –gt 6 –o “$b” –le 3 ];then echo “it’s good.” else echo “it’s bad.” fi → 如果3>6或5≦3為真,則output screen: it’s good. 否則output screen: it’s bad. 例. a=mother b=father if [ “$a = mother –a “$b” !=father ];then echo “the description is true.”;else echo “the description is false.” fi 例. if [ -f /etc/passwd ];then cp /etc/passwd . echo “copy /etc/passwd to here.”;else echo “the file does not exist.” fi 五. while…do…done 當條件成立時執行迴圈,直到條件不成立為止。 例. x=0 while [ “$x” –le 10 ] do echo “current value of x is : $x” x=$(expr $x + 1) sleep 2 done 說明 : # expr 6 6 # expr 5 + 10 15 # a=3 # b=$(expr $a + 5) 上式可寫成 b=`expr $a + 5` # echo $b 8 # c=$(($a+$b)) 上式可寫成 c=$(expr $a + $b)=`expr $a + $b` # echo $c 11 sleep 2 為讓程式暫停兩秒再執行。 Note: until…do…done 是與while相反的語法,在此就不說明。 六. for…in…do…done : for 變數名稱 in 變數值1 變數值2 … do…done in後面接幾個變數值,迴圈便執行幾次。 例. for x in 5 15 20 do if [ “$x” –lt 18 ];then echo “the value of x = $x”;else echo “the value of x is too big.” fi sleep 3 done 七. read 變數名稱: 執行scripts時若遇到read,會出現交談模式,等待您從鍵盤輸入,而所輸入 的內容,便是此變數名稱的變數值。 例. echo –n “Enter your name : “ read name if [ -z “$name” ];then echo “you do not tell me your name.” else echo “Hello!$name,how are you ?” fi 八. case $變數名稱 in 變數值等於in後面所列選項中的其中一個時,便執行那一個選項的敘述, 一般常用來與read作搭配。 例. echo “How old are you ?” echo “1. 15~20 years old” echo “2. 21~30 years old” echo “3. 31~50 years old” echo –n “Enter your choice : “ read choice case $choice in 1) echo “you are too young.”;; 2) echo “your experience is not enough.”;; 3) echo “you have earned much money.”;; *) echo “see you next time.”;; esac 說明: 選項中” * “表示您所輸入資料未包含在以上選項中,或者您根本未 輸入您的選擇。 另外要記得句子結尾加上”;;”,以作為該行的結束。 九. 函式:函式一般都是程式呼叫後才會執行。 例: user() { echo “preparing to add a new user” sleep 1 useradd } echo “1. add user” echo “2. exit” echo –n “Enter your choice : “ read choice case $choice in 1) user;; 2) exit;; *) echo “you do not choose.” esac 十. echo $# 表示在命令列上輸入scripts名稱後,scripts後面共接幾個引數。 echo $* 顯示scripts後所接的引數名稱。 echo $1 表示scripts後面所接的第一個引數名稱。可以到 $9。 echo $0 主程式名稱。 echo $$ 當前shell的pid。 echo $? 返回狀態,也就是表示最後一個程式的狀態,若顯示為0,一般表示沒有錯誤,若顯示為其他數字表示此執行程式有問題。 至於會顯示什麼數字,就要看如何設計scripts了。 例. if [ “$# -ne 1 ];then echo “usage: $0”;else echo “the argument is $1” fi 十一. 例: x=5 y=10 if [ “$x –eq 5 ]&&[ “$y” –eq 10 ];then echo “both condition is true.”;else echo “the conditions are not true.” fi 補:# CMD1 && CMD2 CMD2 is executed when CMD1 is true. # CMD1 || CMD2 CMD2 is executed when CMD1 is false. # CMD1&CMD2&CMD3 →CMD1及CMD2為背景執行,只有CMD3為前景執行。 # CMD1;CMD2;CMD3 →CMD1執行完執行CMD2,CMD2執行完執行CMD3,不論 程式有無存在,都會依序執行。
__________________ 如果您覺得"文章小說討論區"所發的主題不錯 請不要吝嗇 在主題 " 點閱" 及 並給予 發文者一些鼓勵 --------------------------------------------- 為了防止世界被破壞 為了保護世界的和平 貫徹下載與燒錄的邪惡 可愛又迷人的盜版角色 MP3....Program... 我們是穿梭在網際網路中的盜版大隊~~ 拷貝 拷貝的明天正等著我們~~ 就是這樣....喵~~@@ |