Unix-shell-functions

提供:Dev Guides
移動先:案内検索

Unix/Linux-シェル関数

この章では、シェル関数について詳しく説明します。 関数を使用すると、スクリプトの全体的な機能をより小さく論理的なサブセクションに分割し、必要に応じて個々のタスクを実行するために呼び出すことができます。

関数を使用して反復タスクを実行することは、*コードの再利用*を作成する優れた方法です。 これは、現代のオブジェクト指向プログラミングの原則の重要な部分です。

シェル関数は、他のプログラミング言語のサブルーチン、プロシージャ、および関数に似ています。

関数を作成する

関数を宣言するには、単に次の構文を使用します-

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つのパラメーター_Zara_および_Ali_を渡し、関数でこれらのパラメーターをキャプチャして出力する例を示します。

#!/bin/sh

# Define your function here
Hello () {
   echo "Hello World $1 $2"
}

# Invoke your function
Hello Zara Ali

実行すると、次の結果が表示されます-

$./test.sh
Hello World Zara Ali

関数から値を返す

関数内から exit コマンドを実行すると、関数の実行を終了するだけでなく、関数を呼び出したシェルプログラムも終了します。

代わりに関数の実行を単に終了したい場合は、定義済みの関数から抜け出す方法があります。

状況に基づいて、次のような構文を持つ return コマンドを使用して、関数から任意の値を返すことができます-

return code

ここで code はここで選択したものであれば何でも構いませんが、スクリプト全体として意味のある、または有用なものを選択する必要があります。

次の関数は値10を返します-

#!/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つは、関数自体と他の関数を呼び出すことができることです。 自分自身を呼び出す関数は、 _ recursive function_ と呼ばれます。

次の例は、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...
$

シェルから関数の定義を削除するには、*。f *オプションを指定してunsetコマンドを使用します。 このコマンドは、シェルの変数の定義を削除するためにも使用されます。

$ unset -f function_name