shell指令碼 函式及傳參

2021-08-20 04:57:14 字數 1786 閱讀 1094

shell指令碼的函式位置相對自由,既可以乙個shell指令碼單獨成乙個函式, 也可以在主**中嵌入內建函式.

在shell中可以通過下面的兩種語法來定義函式,分別如下:

function_name ()

或者

function function_name()

當某個函式定義好了以後,使用者就可以通過函式名來呼叫該函式了。在shell中,函式呼叫的基本語法如下,

function_name parm1 parm21

例如下面的指令碼:

#!/usr/bin/env bash

# encoding: utf-8.0

function test_func()

echo "here is main function"

echo "now inside function: test_func"

test_func hello world

執行後輸出:

here is main function

now inside function: test_func

input parameter1: hello

input parameter2: world

還可以更複雜一些.例如整個shell指令碼還有控制台的輸入引數:

#!/usr/bin/env bash

# encoding: utf-8.0

function test_func()

function print_list()

echo "here is main function"

echo "now inside function: test_func"

test_func hello world

print_list $1

執行./shell_function.test list.txt得到的輸出如下.可見內建函式內的引數列表和指令碼的引數列表互相並不影響.

here is main function

now inside function: test_func

output from inside-function:test_func

input parameter1: hello

input parameter2: world

line1

line2

line3

line4

比較複雜的shell指令碼通常都會支援多個引數及其輸入. 通常引數的形式為-[a-z,a-z] [filename/settings]的形式. 通常在控制台輸入指令碼名稱時,會顯示出幫助檔案.

可以定義乙個usage() {}函式作為指令碼引數設定的幫助,引數比較少的時候,可以echo命令實現,當引數比較多的時候,可以用cat工具配合eof符號來定義大段的說明文字. 例如:

# 幫助語句

usage()

# 顯示幫助, 當只有指令碼名稱,沒有任何引數的時候,顯示usage函式中定義的內容.

[ "$1" = "" ] && usage

這裡bet命令的呼叫格式定義為:bet [options],這也是一種常見的shell指令碼引數格式. 當options比較多的時候,shell指令碼沒有python argpase這樣的工具包, 應該如何解析這些引數設定呢?

shell指令碼函式及傳參

shell指令碼的函式位置相對自由,既可以乙個shell指令碼單獨成乙個函式,也可以在主 中嵌入內建函式.在shell中可以通過下面的兩種語法來定義函式,分別如下 function name 或者 function function name 當某個函式定義好了以後,使用者就可以通過函式名來呼叫該函...

shell指令碼傳參

喜歡用第二種方法 shell傳函式方法 法一 使用全域性變數 html view plain copy g result function testfunc testfunc echo g result 方法二 把shell函式作為子程式呼叫,將其結果寫到子程式的標準輸出 html view pla...

Shell 向shell指令碼傳參

我們可以在執行 shell 指令碼時,向指令碼傳遞引數,指令碼內獲取引數的格式為 n。n 代表乙個數字,1 為執行指令碼的第乙個引數,2 為執行指令碼的第二個引數,以此類推 傳遞到指令碼的引數個數 以下例項我們向指令碼傳遞三個引數,並分別輸出,其中 0 為執行的檔名 test.sh echo she...