関数を定義する - Linux シェルスクリプト プログラミング

PROGRAM


関数を定義する

Linux シェルスクリプト (sh) では、ユーザー定義関数を利用することができるようになっています。

関数の定義と呼び出し

関数を定義するには、次のような書式となります。

function CUSTOM_FUNCTION()

{

}

このようにすることで、関数 "CUSTOM_FUNCTION" を定義して、次のようにして関数を呼び出すことができるようになりました。

CUSTOM_FUNCTION

呼び出しの際の注意事項としては、使用する関数は、かならずそれよりも上の行で定義されていないといけないところでしょうか。定義されるよりも前にその関数を呼び出そうとすると、その関数は無視されてしまうようなので、十分注意が必要です。

 

なお、関数呼び出しの際に引数を渡したい場合には、次のようにします。

CUSTOM_FUNCTION param1 param2

引数を渡された関数内では、その値を $1, $2, ... という特殊変数で受け取ることが可能です。

function CUSTOM_FUNCTION()

{

NAME=$1

VALUE=$2

 

}

ちなみに $0 という特殊変数からは、呼び出された関数名を取得することができます。

関数の戻り値

関数の戻り値は、数値と文字列とで扱いが変わってきます。

まず、数値による戻り値の場合は、次のように関数内で return ステートメントで返します。

function CUSTOM_FUNCTION()

{

return 100

}

戻り値の取得は、次のように "$?" という特殊変数を利用します。

CUSTOM_FUNCTION

RETVAL=$?

上記の例では、関数 CUSTOM_FUNCTION を呼び出した後、その戻り値を RETVAL という名の変数に格納しています。

 

関数が戻したい結果が文字列の場合は、それは return ステートメントでは、返すことができません。

文字列を返す場合には、それを関数内では echo コマンドによって標準出力へ書き出すようにします。

function CUSTOM_FUNCTION()

{

echo "RESULT TEXT"

}

そうした上で、関数が標準出力に出すテキストを、次のようにして変数に取り込みます。

RETVAL=`CUSTOM_FUNCTION`

書き方としては 外部コマンドを実行して結果を変数に代入する で記したのと同じで、関数の実行結果を変数に受ける感じです。これによって、関数の実行結果を戻り値として受け取ることができるようになりました。

引数を取る関数の場合も同様に "RETVAL=`CUSTOM_FUNCTION param1 param2`" といった具合の書式になります。

局所変数を使用する

Linux シェルスクリプト (sh) では、何もせずに変数を使用すると、その値は関数外など場所を問わず参照できる大域変数(グローバル変数)になるようです。

関数内だけで使用する局所変数(ローカル変数)を利用したい場合には、次のように "local" コマンドを付けて変数の宣言を行います。

function CUSTOM_FUNCTION()

{

# この関数内だけに影響するローカル変数を宣言します。

local LOCAL_VALUE

 

# ローカル変数として宣言してしまえば、後はこの関数内に限り、普通の変数と同じように操作できます。

LOCAL_VALUE="1"

}

このようにすることで、以降、この関数内で local によって宣言した変数に値を書き込んでも、それを関数の外側で参照することはできなくなります。

また、既に関数の外側で同じ名前の変数を使用していた場合でも、関数内ではこの名前を使っても関数の外で使用していた値を参照することはできず、この変数に値を書き込んでも関数の外の値には影響しません。

 

なお、"local" コマンドでの局所変数の宣言と併せて、値を代入することもできます。

function CUSTOM_FUNCTION()

{

# ローカル変数としての宣言と、値の代入を同時に行っています。

local LOCAL_VALUE="1"

}

宣言を分けても同時にしても同じなので、状況や好みに応じてコーディングの方法を分けてみると良いと思います。


[ もどる ]