shell函數返回值有三種方式:1、直接return通過$?來接收返回值;2、定義全局變量,通過全局變量來接收的方式,使用函數返回值。3、echo的方式,通過標准輸出來返回。
帶來一個問題,哪種方式比較好呢?經過血淋淋的教訓,第三種。第一和第二種,假如函數體中用到了管道,則相當於開啟了一個子進程。子進程中的修改、返回操作是無法反應到父進程的。所以,老高將在以後的腳本中,只用第三種方法,在shell的函數中返回值。
無圖無真相!上一段代碼先!
#!/bin/sh
checkInt(){
expr $1 + 0 >/dev/null 2>&1
[ $? -ne 0 ]&&echo 0
echo $1
}
sum=0
while read line
do
tmp=`echo $line|awk '{print $NF}'`
tmp=$(checkInt $tmp)
((sum=$sum+$tmp))
done<test.log
echo $sum