Bash の関数
このチュートリアルでは、function キーワードのない関数と function キーワードのある関数を使用して、Bash の基本関数と Bash スクリプトでの使用法について説明します。
Bash の関数
Bash の関数は、特定のタスクを実行する一連のコマンドです。関数は何度も使用できます。これにより、同じコマンドセットを繰り返し書き込むことを回避できます。関数はまた、スクリプトをより読みやすくします。
通常、関数はデータを取り込んで処理し、値を返します。ただし、bash スクリプトでは、関数は最後のコマンドの終了ステータスのみを返します。
終了ステータスは、0 から 255 までの任意の値です。終了ステータス 0 は、コマンドが正常に実行されたことを意味します。
Bash での関数の定義
Bash には、関数を宣言するための 2つの表記法があります。最初の表記では、以下に示すように、括弧付きの関数名が使用され、その後に中括弧が続きます。
name_of_function(){
command1
command2
}
上記の表記も 1 行で書くことができます。
name_of_function(){command1; command2}
2 番目の表記では、以下に示すように、function キーワードを使用して関数を宣言し、その後に括弧と中括弧を使用します。
function name_of_function(){
command1
command2
}
また、以下に示すように、関数を 1 行で宣言します。
function name_of_function(){command1; command2}
サンプル関数
以下のスクリプトは、bash スクリプトで関数を使用する方法を示しています。まず、関数を定義し、後でそれを呼び出して実行します。以下のスクリプトは、関数名を使用する最初の構文を使用し、その後に括弧と中括弧が続きます。
greet という名前の関数を定義します。中括弧は関数の本体を示します。関数の本体内には、テキストを標準出力に出力する 2つの echo ステートメントがあります。
Bash で関数を呼び出すには、関数の名前を入力します。以下のスクリプトの最後の行は、関数 greet を呼び出します。
#!/bin/bash
greet(){
echo "Hello, World!"
echo "Bash is Fun!"
}
greet
スクリプトは、次の出力を標準出力に出力します。
Hello, World!
Bash is Fun!
以下の bash スクリプトは、function キーワードの後に関数名 add を使用して関数を定義します。add 関数は、expr コマンドを使用して 3 と 7 の 2つの数値を加算し、その合計を var 変数に割り当てます。echo コマンドは、var 変数の値を標準出力に表示します。
関数名の最後の行は、実行のために関数を呼び出すために使用されます。
#!/bin/bash
function add(){
var=`expr 3 + 4`
echo $var
}
add
Bash 関数の可変スコープ
Bash では、すべての変数はデフォルトでグローバル変数です。関数内であっても、Bash スクリプトのどこからでもグローバル変数にアクセスできます。関数内で定義された変数は、Bash のグローバル変数でもあります。
Bash の関数内でローカル変数を定義するには、local キーワードを使用します。
以下のスクリプトは、グローバル変数 x と y、および sum と呼ばれる add 関数内の 1つのローカル変数を定義することにより、変数スコープを示しています。
#!/bin/bash
x=2
y=4
function add(){
local sum
sum=`expr $x + $y`
echo $sum
}
add
上記のスクリプトから、変数 x と y はグローバル変数です。スクリプトのどこからでもこれらにアクセスできます。変数 sum は、local キーワードを使用して定義されているため、ローカル変数です。
定義された関数の本体内のローカル変数にのみアクセスできます。この場合、ローカル変数 sum は add 関数の本体内でのみ使用できます。add 関数本体の外部でローカル変数 sum にアクセスすると、エラーがスローされます。
Bash 関数の戻り値
Bash 関数は、他のプログラミング言語の関数のように呼び出されても値を返しません。Bash 関数は、最後に実行されたコマンドの終了ステータスのみを返します。
終了ステータスは、0 から 255 までの任意の値にすることができます。終了ステータス 0 は、コマンドが正常に実行されたことを意味します。 $? の値を出力することにより、終了ステータスにアクセスできます。
add 関数が呼び出されると、本体内でコマンドが実行されます。最初の行は、expr コマンドの結果を sum 変数に割り当てます。
2 行目は、echo コマンドを使用して、sum 変数の値を標準出力に出力します。最後の行は、終了ステータス値を標準出力に出力します。
出力される終了ステータスは、以前に実行されたコマンドのステータスです。終了ステータスコードは、sum 変数の値を表示する echo コマンド用です。
#!/bin/bash
add(){
sum=`expr 2 + 3`
echo "Sum: $sum"
echo "Exit Status: $?"
}
add
スクリプトを実行すると、次の出力が標準端末に表示されます。
Sum: 5
Exit Status: 0
Bash 関数への引数の受け渡し
bash 関数に引数を渡すには、関数を呼び出すときに、スペースで区切られた関数名の横に引数を置きます。$n 表記はパラメータにアクセスできます。
n は、関数名の横の引数の位置を表します。この場合、$1 は最初の引数 1 を表し、$2 は 2 番目の引数 2 を表します。
function add(){
sum=`expr $1 + $2`
echo $sum
}
add "1" "2"
変数 $0 は関数名を表すために予約されており、$# は関数に渡される位置引数の数を格納します。
上記のスクリプトは、標準出力に対して次の出力を生成します。
3
