測試環境為 CentOS7 x86_64 (虛擬機)
參考文章 – https://ryanstutorials.net/bash-scripting-tutorial/bash-functions.php
Linux Bash shell script 使用函數 function 參考:
function_name () { commands }
範例:
基礎 function
[root@localhost ~]# vi hello.sh #!/bin/bash sayhello () { echo Hello Ben. } sayhello
執行結果:
[root@localhost ~]# chmod a+x hello.sh [root@localhost ~]# ./hello.sh Hello Ben.
傳遞參數給 function
$1 , $2 代表傳遞給 function 的第幾個參數.
[root@localhost ~]# vi hello.sh #!/bin/bash sayhello () { echo Hello $1. } sayhello Ben
執行結果:
[root@localhost ~]# ./hello.sh Hello Ben.
function 回傳值
使用 return 來回傳值(數值) ,而 $? 代表 function 的回傳值.
[root@localhost ~]# vi hello.sh #!/bin/bash sayhello () { echo Hello $1. return 3 } sayhello Ben echo Return value is $?
執行結果:
[root@localhost ~]# ./hello.sh Hello Ben. Return value is 3
通常回傳值為 0 代表正常執行沒有錯誤發生.
從命令列傳遞參數給 function
命令列傳遞參數一樣使用 $1 , $2 代表第幾個參數.
[root@localhost ~]# vi hello.sh #!/bin/bash sayhello () { echo Hello $1. } sayhello $1
執行結果:
[root@localhost ~]# ./hello.sh Ben Hello Ben. [root@localhost ~]# ./hello.sh Hello .
參數的可用範圍
參數可以區分為 Golbal 與 local ,function 所定義的 local 變數,其效果只會在 function 裡面.
[root@localhost ~]# vi hello.sh #!/bin/bash omnitrix () { local var1='Heatblast' var2='Diamondhead' echo Function Var are $var1 , $var2 } var1='Ben10' var2='Ben10' echo Golbal Var are $var1 , $var2 omnitrix echo Golbal Var after omnitrix are $var1 , $var2
執行結果:
[root@localhost ~]# ./hello.sh Golbal Var are Ben10 , Ben10 Function Var are Heatblast , Diamondhead Golbal Var after omnitrix are Ben10 , Diamondhead
雖然 Ben10 在 omnitrix Function 最後變成為 var1=’Heatblast’ 與 var2=’Diamondhead’ ,但在 function 已經定義過相同的 var1 ,所以var1 改變的只會在 function 裡有效果.
function 覆蓋 Linux 指令
如果 Function 名稱與 Function 裡面 Linux 指令相衝突(一樣)時,會無法執行,可以在 Linux 指令前加上 command 即可.
[root@localhost ~]# vi checkpci.sh function lspci () { command lspci -vv | grep -e "LnkCap:" -e "LnkSta:" } lspci
執行結果:
[root@localhost ~]# ./checkpci.sh LnkCap: Port #0, Speed 5GT/s, Width x32, ASPM L0s, Exit Latency L0s <64ns, L1 <1us LnkSta: Speed 5GT/s, Width x32, TrErr- Train- SlotClk- DLActive- BWMgmt- ABWMgmt- LnkCap: Port #0, Speed 5GT/s, Width x32, ASPM L0s, Exit Latency L0s <64ns, L1 <1us LnkSta: Speed 5GT/s, Width x32, TrErr- Train- SlotClk- DLActive- BWMgmt- ABWMgmt-
匯入已建立好的 Linux bash 檔案
我們可以把一些常用的 Function 寫在一個檔案,當別的 Bash script 需要使用時,只需要使用 source Bashscriptfilename 就可以把它匯入到目前 bash script 來使用.
[root@localhost ~]# vi common.sh #!/bin/bash sayhello () { echo Hello Ben. } [root@localhost ~]# vi run.sh source common.sh sayhello [root@localhost ~]# chmod a+x common.sh [root@localhost ~]# chmod a+x run.sh
執行結果:
[root@localhost ~]# ./run.sh Hello Ben.
沒有解決問題,試試搜尋本站其他內容