1.shell中的函數定義格式為:
function name(){
#函數體
}
函數的定義必須遵循先定義在使用的原則,如定義函數print
#!/bin/shfunction print(){if [ $# -lt 1 ]then print “no parameter”;return 1;else ehco “$1,$2”;return 0;fi}ehco “print function is being invoked”print
上面的return 語句是函數的返回值,可以用0表示函數運行成功,1表示運行失敗,如果沒有return 語句,shell函數最後命令產生的值作為返回值。
除了在指令碼中可以定義使用函數外,還可以將函數寫成一個檔案,然後載入函數即可調用。
如定義下面的函數
#!/bin/sh#filename:guessnum.shfunction guess(){num1=$RANDOM;num=$num1%100;echo “please guess a number”while truedoprintf “input a number\n”read inpuif (($inpu == $num))thenprintf “right\n”;break;elseif (($inpu < $num))then printf “too low\n”;elseprintf “too high\n”;fi done}
把這個函數儲存為guessnum.sh檔案,然後定位檔案,方法是: <.><空格><檔案名稱>
即 $. guessnum.sh
檢查載入的狀態: set|grep guessnum
執行函數:guessnum
刪除函數:unset guessnum
刪除後,重新載入,guessnum函數可以繼續使用。
下面是case語句的介紹,shell中的case語句基本格式為
case $變數名 in
匹配模式1)
;;
匹配模式2)
;;
匹配模式3)
;;
esac
#!/bin/bashprintf “input a character\n”;read ch;case $ch in [a-z])echo “lower”;;;[A-Z])echo “upper”;;;[^A-Za-z])ehco “not a character”;;;esac
上面的代碼在ubuntu環境運行時,可能會出現大小寫不分的情況,即大寫字母或者小寫字母都會出 “lower”的結果,解決方案是運行LANG=C的命令,在運行程式。LANG=C中的C代表英文ASCII環境。
下面是for語句的介紹,for語句的基本格式為:
(1)for ((賦值;條件;運算語句))
do
#statements
done
計算n的階乘方法為
#!/bin/shread –p “input a number” nums=1;for ((i=1;i<=$num;i++))s=$s*$i;echo ${{s}}
上面的代碼在ubuntu環境執行時,可能會出現bad for loop 錯誤,原因是ubuntu為了加快開機速度,將bash替換成了 dash,因為dash體積小,運行更快。解決錯誤的辦法是在終端中輸入命令sudo dpkg-reconfigure dash,然後在選項中選No就可以了。
(2)for … in…
do
#statement
done
產生5個隨機數,可以這樣
for k in 1 2 3 4 5
do
echo $RANDOM
done