Unix / Linux-シェル関数

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

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

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

関数の作成

関数を宣言するには、次の構文を使用するだけです。

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

#!/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...
$

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

$ unset -f function_name