標籤:style blog http color 使用 sp on div 2014
SHELL函數調用分為兩種:
第一種方式,有點像C語言調用函數的風格,直接把函數的執行結果複製給變數!不過,這個賦值過程和C語言的函數賦值是不一樣的!
C語言中,函數調用,是將函數的傳回值返回給被調函數,如:
fun(){ return (1+2);}main(){ a = fun(); ...............}
這實際上是將函數的傳回值,也就是return的值複製給變數a!可是,大家注意:shell中函數調用的第一種方式,是將標準輸出傳遞給主程式的變數,而不是傳回值!請看以下程式 test.sh:
#!/bin/sh check_user(){ n=`cat /etc/passwd | cut -d ":" -f 1 | grep "^$1$" -Rn | cut -d ":" -f 1` echo $n #這裡是使用echo語句,將結果輸出到標準輸出上,所以在主程式中可以使用變數接收}userinfo(){ userinfo=`head -$1 /etc/passwd | tail -1 | cut -d ":" -f 3,4` echo $userinfo}while truedo read username m=`check_user $username` #使用變數接收函數check_user傳遞的值 if [ -n "$m" ] then userinfo $m exit else echo "$username is not exit!" fidone
測試代碼:
[[email protected] ~]$ ./test.sh dddd is not exit!qiu.li40006:1004
而函數的第二種調用方式,是使用$?來接收上一程式的傳回值狀態,也就是return返回的值。下面程式中,if判斷後,return 0 或者 1,在這裡,我們就可以使用$?接收return的值,然後儲存下來,繼而進行下一步的判斷!
check_user(){ n=`cat /etc/passwd | cut -d ":" -f 1 | grep -n "^$1$"| cut -d ":" -f 1` if [ -z "$n" ] then return 0 else return 1 fi}show_userinfo(){ userinfo=`head -$n /etc/passwd | tail -1 | cut -d ":" -f 1,3,4` echo $userinfo}echo "input username : "read usernamecheck_user $usernamenum=$?if [ $num -eq 0 ]then echo "The user ‘$username‘ is not exist." exitelse show_userinfo $nfi
上面兩個程式的執行結果是一樣的,但是要注意著兩種函數的不同調用方式,以及其返回給主調程式的到底是什麼。明白了這一點,才能準確知道到底使用何種方式接收傳回值!
SHELL函數處理