頭條號:浩渺煙波
Shell中的函數分為兩種,一種是系統函數,一種是自定義函數
系統函數: basename,獲取最後的文件名,如果第二個參數加上後綴就會去掉後綴
<code>[root@VM_0_11_centos shell]# basename /root/training/shell/shell_for.sh shell_for.sh [root@VM_0_11_centos shell]# basename /root/training/shell/shell_for.sh .sh shell_for/<code>
系統函數: dirname 跟basename正好相反,返回的是初文件名以外的目錄
<code>[root@VM_0_11_centos shell]# dirname /root/training/shell/shell_for.sh /root/training/shell/<code>
自定義函數: 自定義函數的各式如下:
<code>[function] functionName [()] { 具體邏輯 [return int] }/<code>
中括號裡面的都是選的,也就是說可以不加,function可以不加,甚至函數名後面的括號也可以不加,但是要注意空格,返回值也可以不加,如果不加則默認是最後一條語句的結果作為返回值,return後面跟的是數值
調用的話直接functionName即可
怎麼傳參數呢?函數名括號後面是沒有參數的。實際上傳的時候直接在跟在調用的命令後面,函數體裡面回去參數使用$n,記得在上幾篇說過一個知識點$n可以獲取命令行的參數,這裡跟那裡是一樣的。$1表示第一個參數,$2表示第二個參數,依次類推,10之後用${10}.比如:
<code> getSum () { SUM=$[$1+$2] echo "sum = $SUM" return $SUM } getSum 10 20 echo $?/<code>
結果:
<code>[root@VM_0_11_centos shell]# ./shell_fun.sh sum = 30 30/<code>
上面有一個$?,這個操作符是預定義變量表示的最後的執行狀態,這個前面也說過,還有兩個$$表示當前進程的pid,$!表示的是最後一個後臺進程的pid。
未完待續!
參考:https://www.runoob.com/linux/linux-shell-func.html