この章では、シェル関数について詳しく説明します。関数を使用すると、スクリプトの全体的な機能をより小さな論理サブセクションに分割し、必要に応じて個々のタスクを実行することができるようになります。
関数を使用して繰り返しタスクを実行することは、コードの再利用を作成する優れた方法です。これは、現代のオブジェクト指向プログラミングの原則の重要な部分です。
シェル関数は、他のプログラミング言語のサブルーチン、プロシージャ、および関数に似ています。
関数の作成
関数を宣言するには、次の構文を使用します。
function_name () { list of commands }
関数の名前はfunction_nameで決定でき、それはあなたのスクリプトのどこかから呼び出すために使うものです。関数名の後にはかっこを続け、その後に中括弧で囲んだコマンドのリストを続ける必要があります。
例
以下の例は、
#!/bin/sh # Define your function here Hello () { echo "Hello World" } # Invoke your function Hello
実行すると、次の出力が表示されます。
$./test.sh Hello World
パラメータを関数に渡す
関数を呼び出すときにパラメータを受け入れる関数を定義することができます。これらのパラメータは$ 1、$ 2などで表されます。
以下は、2つのパラメータKENとYOKOを渡し、関数内でこれらのパラメータを取得して出力する例です。
#!/bin/sh # Define your function here Hello () { echo "Hello World $1 $2" } # Invoke your function Hello KEN YOKO
実行時には、次の結果が表示されます。
$./test.sh Hello World KEN YOKO
関数からの戻り値
関数の中からexitコマンドを実行すると、関数の実行を終了させるだけでなく、その関数を呼び出したシェルプログラムも終了させることができます。
代わりに関数の実行を終了するだけの場合、定義された関数から出る方法があります。
状況に基づいて、次のような構文を持つreturnコマンドを使用して、関数から任意の値を返すことができます。
return code
ここでコードはあなたがここで選ぶものであれば何でも構いませんが、明らかにスクリプト全体の中で意味のあるものや有用なものを選ぶべきです。
例
次の関数は値1を返します。
#!/bin/sh # Define your function here Hello () { echo "Hello World $1 $2" return 10 } # Invoke your function Hello Zara Ali # Capture value returnd by last command ret=$? echo "Return value is $ret"
実行時には、次の結果が表示されます。
$./test.sh Hello World Zara Ali Return value is 10
入れ子関数
関数のより興味深い特徴の1つは、自分自身と他の関数を呼び出すことができることです。自己を呼び出す関数は再帰関数と呼ばれます。
次の例は、2つの関数のネストを示しています。
#!/bin/sh # Calling one function from another number_one () { echo "This is the first function speaking..." number_two } number_two () { echo "This is now the second function speaking..." } # Calling function one. number_one
実行時には、次の結果が表示されます。
This is the first function speaking... This is now the second function speaking...
プロンプトからの関数呼び出し
.profile内によく使われる関数の定義を入れることができます。これらの定義は、ログインするたびに使用でき、コマンドプロンプトで使用できます。
別の方法として、定義ファイルをtest.shなどのファイルにグループ化し、現在のシェルでファイルを実行するには、次のように入力します。
$. test.sh
これは、test.sh内で定義された関数を次のように読み込んで現在のシェルに定義させるという効果があります。
$ number_one This is the first function speaking... This is now the second function speaking... $
シェルから関数の定義を削除するには、unsetコマンドと.fオプションを使用します。このコマンドは、シェルの変数の定義を削除するためにも使用されます。
次のページ