Bashの基本シリーズの最終章では、関数についてのすべてを学びます。
ほとんどのプログラミング言語は関数の概念をサポートしています。
関数を使えば、同じプログラムの中で何度も同じコードを書く必要がなくなります。コードを関数として記述し、特定のコード部分を必要とする場所で関数を使用するだけです。
Bash基礎シリーズ最終章では、Bashスクリプトでの関数の使い方を学びます。
Bash の関数
以下は、Bash関数を宣言するための一般的な構文です:
function_name() {commands
関数内のコマンドは、「関数呼び出し」スクリプト内にある場合にのみ実行されます。
以下はその状況を示す擬似コードです:
function_name() {commandssome_other_commandsfunction_name argument;
関数の定義は、関数を呼び出すところになければなりません。
簡単な例で見てみましょう:
#!/bin/bashfun() {echo "This is a function"echo "This is a script"
スクリプトを実行すると、次のような出力が表示されるはずです:
This is a scriptThis is a function
関数は引数なしで呼び出されます。次に、bashで関数への引数がどのように扱われるかを見てみましょう。
関数への引数の渡し方
関数に引数を渡すのは、Bashスクリプトに引数を渡すのと同じです。関数を呼び出すときに、関数名の横に引数を書くことができます。
function_name argument;
例を見てみましょう:
#!/bin/bashsum() {sum=$(($1+$2))echo "The sum of $1 and $2 is: $sum"echo "Let's use the sum function"sum 1 5
このスクリプトを実行すると、次のような出力が表示されます:
Let's use the sum functionThe sum of 1 and 5 is: 6
スクリプトに渡されるパラメータは、関数に渡されるパラメータとは異なることを覚えておいてください。
以下の例では、関数を呼び出す際にパラメータを入れ替えています。
#!/bin/basharg() {echo "1st argument to function is $1 and 2nd is $2"echo "1st argument to script is $1 and 2nd is $2"arg $2 $1
このスクリプトを実行すると、次のようなやりとりが表示されます:
$ ./function.sh abhi shek1st argument to script is abhi and 2nd is shek1st argument to function is shek and 2nd is abhi
Bash の再帰関数
再帰関数は自分自身を呼び出します。これが再帰の意味です。このステミング図が理解の助けになるでしょう。
再帰は非常に強力で、複雑なプログラムを書くのに役立ちます。
階乗を計算するサンプルスクリプトを使って、それがどのように適用されるかを見てみましょう。因みに階乗の定義は以下の通りです。
nの階乗:
(n!) = 1 * 2 * 3 * 4 *... * n
つまり、5の階乗は1×2×3×4×5で、120になります。
再帰を使って与えられた数の階乗を計算するスクリプトです。
#!/bin/bashfactorial() {if [ $1 -gt 1 ]; thenecho $(( $1 * $(factorial $(( $1 -1 ))) ))echo 1echo -n "Factorial of $1 is: "factorial $1
echo $(( $1 * $(factorial $(( $1 -1 ))) ))コードは、入力値より1小さい値で関数自体を呼び出します。つまり、スクリプトを実行してパラメータに 5 を入力すると、最終的に 5 * 4 * 3 * 2 * 1 という結果が返されます。
$ ./factorial.sh 5Factorial of 5 is: 021
とてもいいですね。では、練習をしましょう。
演習時間
学んだことを実践するのに役立つプログラミング課題のサンプルをいくつかご紹介します。
練習1:is_evenという関数を使って、与えられた数が偶数かどうかをチェックするBashスクリプトを書いてください。
練習2:同じような練習として、is_primeという関数を持ち、与えられた数が素数かどうかをチェックするスクリプトを書く必要があります。まだ知らないかもしれませんが、素数は1とそれ自身でしか割り切れません。
練習3:与えられた数のフィボナッチ数列を生成するスクリプトを書いてください。数列は1から始まり、スクリプトは3より大きい数を受け付ける必要があります。
ですから、 fibonacci.sh 5実行すると、"1 1 2 3 5 "と出力されるはずです。
皆さん、お待たせしました!これがBash基礎シリーズの最終章です。もちろん、ここで学んだことは氷山の一角にすぎません。Bashプログラミングについて学ぶべきことはまだまだたくさんあります。
しかし、今までにBashシェルについてある程度理解しているはずです。ほとんどのBashスクリプトを理解し、複雑なものでなくても簡単なスクリプトを書けるようになっているはずです。
より深く知りたいのであれば、GNU Bashのマニュアルを読むに越したことはありません。
経由





