linux shell 可以用戶定義函數,然後在shell腳本中可以隨便調用。下麵說說它的定義方法,以及調用需要註意那些事項。 原文和作者一起討論:http://www.cnblogs.com/intsmaze/p/6675421.html 微信:intsmaze 原文和作者一起討論:http:// ...
linux shell 可以用戶定義函數,然後在shell腳本中可以隨便調用。下麵說說它的定義方法,以及調用需要註意那些事項。
原文和作者一起討論:http://www.cnblogs.com/intsmaze/p/6675421.html
微信:intsmaze
函數定義
#!/bin/sh # func1.sh hello() ## 函數定義 { 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-06 0 now going to the function hello intsmaze
註意:
1.必須在調用函數之前,先聲明函數,shell腳本是逐行運行。不會像其它語言一樣先預編譯。
2.函數返回值,只能通過$? 系統變數獲得,可以顯示加:return 返回,如果不加,將以最後一條命令運行結果,作為返回值。 return後跟數值n(0-255)
函數參數
#!/bin/bash # fun1.sh funWithParam(){ 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.sh funWithReturn(){ echo "這個函數會對輸入的兩個數字進行相加運算..." echo "輸入第一個數字: " read aNum echo "輸入第二個數字: " read anotherNum echo "兩個數字分別為 $aNum 和 $anotherNum !" return $(($aNum+$anotherNum)) } funWithReturn echo "輸入的兩個數字之和為 $? !"#這裡上一個命令是 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.sh funWithParam 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 !