shell獲取函數的返回值


背景:定義了一個函數,比對本地和線上服務器集群數量差別,想要獲取不同集群的個數。shell和其他語言的函數返回值還是差別挺大的。
 
定義一個函數
functionname(){
     操作內容
     echo 輸出內容
     return 返回值 #返回值可有可不有
}
 
獲得函數的返回值
 
1.函數默認是將標准輸出傳遞出來,不是返回值。
所以如果直接調用functionname,實際上是將輸出傳遞回來
例如:
a=`functionname`
將函數functionname的標准輸出傳遞給a
 
2.調用函數不需要加(),直接寫函數名就可以
functionname
 
3.使用$?接收上一程序的返回值狀態,也就是return的值
functionname
echo $?
這里輸出的是函數的返回值
 
4.函數的返回值一般是0和1,表示成功和失敗,如果一定要返回其他整數,定義一個全局變量,在函數中改變它
遇到的問題:
將函數返回值賦值時報錯: return: diffrentcluster: numeric argument required
 
雖然不影響使用,但看着總是不好,查了一下說shell的函數默認是返回0和1來表示是否成功的,如果一定要返回值的話,可以在函數外定義一個全局變量,然后在函數中賦值這個變量。這樣調用函數后,全局變量就變了,達到同樣的效果
 
例如:通過函數增加num值
#!/bin/sh
num=10
add(){
     echo "test"
     ((num++))
}
 
add
 
輸出的結果是11(變量自增我用num=num+1是無效的,不知道為什么,必須要用num++)
 
其他
shell中函數的參數定義也和其他語言不一樣,不是放在括號內。函數中定義時直接在函數體內使用$1、$2....$n來表示參數
調用時直接 functionname para1 para2 ..paran來調用函數
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM