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
閱讀更多 浩渺煙波 的文章