English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Shell ファンクション

linux shellはユーザー定義関数を定義し、shellスクリプトで自由に呼び出すことができます。

shellで関数の定義形式は以下の通りです:

[function] funname [()]
{
    action;
    [return int;]
}

説明:

  • 1、function fun()  定義可能、またはfun()  直接定義可能で、引数は一切不要です。

  • 2、引数の戻り値を表示し、加算を表示できます:return 返り値、表示しない場合は最後の命令の結果が返り値として使用されます。returnの後には数値n(0-255

以下の例では、関数を定義し、呼び出します:

#!/bin/bash
# author:基礎教程網
# url:ja.oldtoolbag.com
demoFun(){
    echo "これは私の最初のshell関数です!"
}
"-----関数の実行が開始されました-----"
demoFun
"-----関数の実行が完了しました-----"

出力結果:

-----関数の実行が開始されました-----
これは私の最初のshell関数です!
-----関数の実行が完了しました-----

以下にreturn文を含む関数を定義します:

#!/bin/bash
# author:基礎教程網
# url:ja.oldtoolbag.com
funWithReturn(){
    echo "この関数は、入力された2つの数字を加算演算を行います..."
    echo "第1つの数字を入力してください:"
    read aNum
    echo "第2つの数字を入力してください:"
    read anotherNum
    echo "2つの数字は$aNumと$anotherNum!"
    return $(($aNum+$anotherNum))
}
funWithReturn
echo "入力された2つの数字の和が$?!"

以下のような出力が得られます:

この関数は、入力された2つの数字を加算演算を行います...
第1つの数字を入力してください: 
1
第2つの数字を入力してください: 
2
2つの数字はそれぞれ 1 と 2 !
入力された2つの数字の和は 3 !

関数の戻り値は、関数を呼び出した後に$?を通じて取得されます。

注意:すべての関数は使用する前に定義する必要があります。これは、関数をスクリプトの最初の部分に配置し、shellエンティティが最初にそれを見つけるまで使用できないことを意味します。関数を呼び出す際には、関数名のみを使用します。

関数引数

Shellでは、関数を呼び出す際に引数を渡すことができます。関数体内部では、$nの形式で引数の値を取得します。例えば、$1第1引数を示し、$2第2引数を示す...

引数付きの関数の例:

#!/bin/bash
# author:基礎教程網
# url:ja.oldtoolbag.com
funWithParam(){
    echo "第1個のパラメータは $1 !"
    echo "第2個のパラメータは $2 !"
    echo "第10個のパラメータは $10 !"
    echo "第10個のパラメータは ${10} !"
    echo "第11個のパラメータは ${11} !"
    echo "パラメータの合計数は $# 个!"
    echo "すべてのパラメータを出力する文字列 $* !"
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73

出力結果:

第1個のパラメータは 1 !
第2個のパラメータは 2 !
第10個のパラメータは 10 !
第10個のパラメータは 34 !
第11個のパラメータは 73 !
パラメータの合計数は 11 個!
としてすべてのパラメータを出力する文字列 1 2 3 4 5 6 7 8 9 34 73 !

注意、$10 第10個のパラメータを取得することはできません。第10個のパラメータを取得するには${10}。当n>=10の場合、${n}を使用してパラメータを取得する必要があります。

また、パラメータを処理するためのいくつかの特殊文字があります:

パラメータ処理 説明
$# スクリプトや関数に渡されるパラメータの数
$* すべてのパラメータを一つの文字列として表示します。
$$ スクリプトが実行している現在のプロセスID番号
$! バックグラウンドで実行されている最後のプロセスのID番号
@ と $*同じですが、使用時に引用符を追加し、引用符内で各パラメータを返します。
$- Shellが使用している現在のオプションを表示します。setコマンドの機能と同じです。
$? 最後のコマンドの終了ステータスを表示。0はエラーなしを意味し、他の値はエラーを意味します。