Lから始まるLinux

3章21話
パラメータ展開(拡張)
3章22話 シェル関数
もくじ
3章23話
ドットコマンド
シェル関数
若木 みどり
お兄ちゃん! 自作スクリプトの内容が どんどん大きくなって 読むのも大変になってきたよ!
若木 しげる
それは大変だね 今回はまとまった機能を分割する 「シェル関数(shell function)」を学ぼう! 以降、単に「関数(function)」と呼ぶよ
使い方
若木 しげる
関数は以下のように定義するよ
function 関数名() {
  処理
}
若木 しげる
function は省略可能なんだだからこのように書いても同じだよ
関数名() {
  処理
}
若木 しげる
定義した関数はコマンドと同じように呼び出せるよ
関数名
若木 みどり
処理のまとまりに意味のある名前を付けて呼び出せるのねこれだけでもスクリプトの中身を整理できそうだよ
終了ステータス
若木 しげる
関数も終了ステータスを返すよ関数内で最後に実行されたコマンドの終了ステータスが関数の終了ステータスになるんだ
若木 みどり
終了ステータスの制御は難しそうだね…exit のように終わりたいタイミングで関数を終わらせて終了ステータスを返せないものかな?
若木 しげる
return関数を終了して終了ステータスを返すよ!
return [終了ステータス]
若木 みどり
exit はシェルを終了するけどreturn は関数を終了させるんだね!
引数
若木 しげる
関数内では引数を表す特殊変数には関数が呼ばれたときの引数の値が入っているよ
若木 みどり
関数でも引数を扱えるんだねもうほとんどコマンドと変わらないよ!
local コマンド
若木 しげる
localシェル関数内のみ有効な変数を宣言するよその役割から関数の中でしか使えないよ
local [オプション]... [変数名[=値]]
若木 みどり
変数の範囲がわかりやすくなるね!
注意点
若木 しげる
シェルスクリプトは上から下へ書かれた順に実行されて行くんだなので関数定義の前に関数呼び出しをすると「そんなコマンドはない!」と怒られるよ
若木 みどり
関数定義は早いうちにしておいた方が良さそうだね!
若木 しげる
関数定義はシェルスクリプト冒頭に書くのがおすすめだよ
まとめ
若木 みどり
今回は関数の使い方を学んだよ!まとまった処理に名前を付けてコマンドのように呼び出せるんだ!
若木 しげる
関数はシェルスクリプト内でよく使われるけど通常のシェル上でも定義できるよあたかもそういうコマンドがあるかのように実行できるようになって便利なんだ