Linux之shell編程函數使用,linuxshell編程
linux shell 可以使用者定義函數,然後在shell指令碼中可以隨便調用。下面說說它的定義方法,以及調用需要注意那些事項。
原文和作者一起討論:http://www.cnblogs.com/intsmaze/p/6675421.html
:intsmaze
函數定義
#!/bin/sh# func1.shhello() ## 函數定義{ echo "Hello there today's date is `date +%Y-%m-%d`" # return 2 ###傳回值其實是狀態代碼,只能在[0-255]範圍內} hello #函數調用echo $? #擷取函數的return值,就是擷取上一個命令的狀態代碼,如果return 2沒有注釋,就是擷取return 2 命令的狀態嗎。 echo "now going to the function hello intsmaze"
呼叫指令碼
[hadoop@centos-Reall-131 shtest]$ sh func1.sh Hello there today's date is 2017-04-060now going to the function hello intsmaze
注意:
1.必須在調用函數之前,先聲明函數,shell指令碼是逐行運行。不會像其它語言一樣先先行編譯。
2.函數傳回值,只能通過$? 系統變數獲得,可以顯示加:return 返回,如果不加,將以最後一條命令運行結果,作為傳回值。 return後跟數值n(0-255)
函數參數
#!/bin/bash# fun1.shfunWithParam(){ echo "第一個參數為 $1 !" echo "第二個參數為 $2 !" echo "第十個參數為 $10 !" echo "第十個參數為 ${10} !" echo "第十一個參數為 ${11} !" echo "參數總數有 $# 個!" echo "作為一個字串輸出所有參數 $* !"}funWithParam 1 2 3 4 5 6 7 8 9 34 73
注意,$10 不能擷取第十個參數,擷取第十個參數需要${10}。當n>=10時,需要使用${n}來擷取參數。
[hadoop@centos-Reall-131 shtest]$ sh fun1.sh 第一個參數為 1 !第二個參數為 2 !第十個參數為 10 !第十個參數為 34 !第十一個參數為 73 !參數總數有 11 個!作為一個字串輸出所有參數 1 2 3 4 5 6 7 8 9 34 73 !
函數傳回值
#!/bin/bash# fun2.shfunWithReturn(){ echo "這個函數會對輸入的兩個數字進行相加運算..." echo "輸入第一個數字: " read aNum echo "輸入第二個數字: " read anotherNum echo "兩個數字分別為 $aNum 和 $anotherNum !" return $(($aNum+$anotherNum))}funWithReturnecho "輸入的兩個數字之和為 $? !"#這裡上一個命令是 return $(($aNum+$anotherNum))
呼叫指令碼
[hadoop@centos-Reall-131 shtest]$ sh fun2.sh 這個函數會對輸入的兩個數字進行相加運算...輸入第一個數字: 100輸入第二個數字: 200兩個數字分別為 100 和 200 !輸入的兩個數字之和為 44 !#這裡上一個命令是 return 300
跨指令碼調用函數
假如上述的指令檔fun1.sh儲存在此路徑:/root/fun1.sh
則可在指令碼fun_other.sh中呼叫指令碼fun1.sh中的函數
#!/bin/bash# fun_other.sh. /root/fun1.sh # 註: . 和 / 之間有空格# 或者 source /root/fun1.shfunWithParam 11 22 33 44 55 66 77 88 99 100 101
呼叫指令碼
[hadoop@centos-Reall-131 shtest]$ sh fun_other.sh第一個參數為 1 !第二個參數為 2 !第十個參數為 10 !第十個參數為 34 !第十一個參數為 73 !參數總數有 11 個!作為一個字串輸出所有參數 1 2 3 4 5 6 7 8 9 34 73 !第一個參數為 11 !第二個參數為 22 !第十個參數為 110 !第十個參數為 100 !第十一個參數為 101 !參數總數有 11 個!作為一個字串輸出所有參數 11 22 33 44 55 66 77 88 99 100 101 !