Bash shell script – function

測試環境為 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.
沒有解決問題,試試搜尋本站其他內容

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料