Shell 函式的使用

wonbin發表於2020-01-07

函式的定義方式

  • function 關鍵字,可以不需要括號
    function  func_name {
    command 1
    command 2
    ...
    command N
    }
  • 沒有 function 關鍵字,需要括號
    func_name() {
    command 1
    command 2
    ...
    command N
    }

函式的使用方式(呼叫)

  • 直接使用函式名呼叫,不需要括號,可以將其想象成 shell 中的一條命令
    $ func_name [arg1 arg2 ... argN]
  • 函式內部可以直接使用 $1 $2 ... $N
    func_name() {
    echo $1
    echo $2
    }

    函式的返回值

  • return 使用 return 返回值只能 返回1~255的整數,通常只是用來供其他地方呼叫獲取狀態,因此通常僅返回0或1, 非零表示失敗
  • echo 可以返回任何字串結果,通常用於返回資料,比如一個字串值或者列表值

    全域性變數與區域性變數

  • 全域性變數

    • 不做特殊宣告,Shell 中變數都是全域性變數
    • Tips:大型指令碼程式中慎用全域性變數

    vim test_local1.sh

    #!/bin/bash
    var1="Hello World"
    function test {
    var2=120
    }
    [wonbin@localhost shell]$ sh test_local.sh 
    Hello World
                        //  為空 因為test 函式沒有執行
    [wonbin@localhost shell]$ 

    vim test_local2.sh

#!/bin/bash
var1="Hello World"
function test {
    var2=120
}
echo $var1
echo $var2
test   //  var2 變成全域性變數
echo $var1
echo $var2
function test2 {
  echo $var1
  echo $var2

}
test2

執行結果

[wonbin@localhost shell]$ sh test_local2.sh 
Hello World

Hello World
120
Hello World
120
[wonbin@localhost shell]$
  • 區域性變數
    • 定義變數時,使用 local 關鍵字
    • 若函式內外存在同名變數,則函式內部覆蓋外部變數

vim test_local3.sh

#!/bin/bash
var1="Hello World"
function test {
    local var2=120   // 僅在函式內部有效
}
test 
echo $var1
echo $var2

執行結果

[wonbin@localhost shell]$ sh test_local3.sh 
Hello World

[wonbin@localhost shell]$

函式庫

為什麼要定義函式庫,將一些通用的功能封裝起來,方便其他用到的地方呼叫

  • 經常使用到的重複程式碼封裝成函式檔案
  • 一般不直接執行,而是其他指令碼呼叫
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章