shell函式、Script檢查、迴圈結構
6、函式 語法格式: function func-name() { 語句組 }
任務:輸入one,輸出Today is Monday,輸入two,輸出Today is Tuesday……
1)編輯指令碼:vim func01.sh #!/bin/bash
function print() { echo “Today is $1” } case $1 in “one”) print “Monday” ;; “two”) print “Tuesday” ;; “three”) print “Wednesday” ;; “four”) print “Thursday” ;; “five”) print “Friday” ;; “six”) print “Saturday” ;; “seven”) print “Sunday” ;; *) echo “You must input a number between one and seven.” esac
2)設定許可權:chmod u+x func01.sh
3)執行指令碼
課堂練習:編寫計算圓面積的函式並呼叫。
圓周率3.14是實數,要考慮腳本里如何處理實數的計算。 1)編輯指令碼:vim func02.sh #!/bin/bash
function circle_area() {
s=echo "scale=2; 3.14*$1*$1" |bc
}
read -p “r=” r circle_area s" 2)設定許可權:chmod u+x func02.sh
3)執行指令碼
補充:如何獲取函式的返回值?
函式體利用return語句返回函式值,但是隻能是整數。
呼叫函式後,利用 $? 可以獲取函式的返回值。
課堂練習:編寫符號函式sign(),輸入正整數,返回1,輸入零,返回0,輸入負整數,返回-1。
#!/bin/bash
function sign() { if [ $1 -gt 0 ]; then return 1 else if [ $1 -eq 0 ]; then return 0 else return – -1 fi fi }
read -p “num=” num sign $num echo $?
2)設定許可權:chmod 765 func03.sh
3)執行指令碼:./func03.sh
說明:符號位元組型的-1對映到無符號位元組型的255,符號位元組型的-2對映到無符號位元組型的254,以此類推。
7、Script檢查 (1)命令格式 sh [-nvx] scripts.sh (2)選項與引數 -n:(non-execution)不執行script,僅查詢語法的問題; -v:(verbose)在執行scripts.sh前,先將scripts.sh的內容輸出到螢幕上; -x:(executed)將使用到的scripts.sh內容顯示到螢幕上,這是很有用的引數; !!!
任務1:測試func02.sh是否有語法問題。
沒有任何輸出,表明指令碼語法沒有問題。
再次檢查指令碼func02.sh的語法有沒有問題: 可以看出,指令碼執行出錯,但是sh -n卻無法檢查出這個錯誤。
再次修改func02.sh: 再次檢查指令碼func02.sh的語法有沒有問題:
sh -n確實能夠捕獲這種型別的語法錯誤。
任務2:執行func03.sh之前輸出指令碼內容。
8、迴圈結構 (1)條件迴圈
第一種條件迴圈:當型迴圈 while [ 條件 ]; do 命令組 done
執行情況:條件為真,執行迴圈,直到條件為假,結束迴圈。
任務1、每個兩秒顯示系統負載監測結果。
#!/bin/bash
while true do uptime sleep 2 done
永真迴圈是個死迴圈。
2)設定許可權:chmod u+x while01.sh
3)執行指令碼:./while01.sh
怎麼結束這個死迴圈呢?很簡單,按Ctrl+C即可。
任務2、計算1+2+3+……+100 1)編輯指令碼:vim sum.sh #!/bin/bash
i=1 sum=0 while [ ((i)) i=i+1)) done echo “1+2+…+100=$sum”
2)設定許可權:chmod u+x sum.sh
3)執行指令碼:./sum.sh
第二種條件迴圈:直到型迴圈 until [ 條件 ]; do 命令組 done
執行情況:條件為假,執行迴圈,直到條件為真,結束迴圈。
任務:計算1+2+3+……+100
#!/bin/bash
i=1 sum=0
until [ ((i)) i=i+1)) done
echo “1+2+…+100=$sum”
2)設定許可權:chmod u+x sum02.sh
3)執行指令碼:./sum02.sh
(2)計數迴圈 for … do [語句組] done
任務:計算1+2+……+100
1)編寫指令碼:vim sum03.sh #!/bin/bash
sum=0
for i in seq -s " " 1 1 100
# start,step,stop
do
sum=sum+$i))
done
echo “1+2+…+100=$sum” 2)設定許可權:chmod u+x sum03.sh
3)執行指令碼:./sum03.sh