UNIXシェルスクリプト第3章Part1
シェル関数、組み込みコマンド
name()
{
command
}
関数の定義の仕方。
return [n]
関数の戻り値の設定の仕方。
任意の番号を設定すれば、それがこの関数の戻り値となる。
ここで返す値は通常のコマンドの実行終了ステータスと同じ取り扱いになり、シェル変数の$?で参照可能。
動作状態により違いに関する注意
●ディレクトリ
関数内でディレクトリを移動する操作を行った時、カレントシェルで実行している場合には、関数の終了時にディレクトリはそれにつられて移動している。
一方サブシェル内で実行している場合には、関数の終了後、元のディレクトリに戻る。
●変数
関数内で何か変数に対して処理を行った時、カレントシェルの場合にはその変更内容が残る。サブシェルの場合には関数が終了すれば元の値に戻る。
●exitコマンド
関数内でexitコマンドを実行した時、カレントシェルで実行してい関数の場合には、関数はもちろんそのシェル自体が終了する。サブシェルで実行している場合には、その関数が終了するだけ。
シェル関数内の位置パラメタ($*)
シェル関数では$0は関数の名前にならず、関数を読んだ元のシェル(あるいはシェルスクリプト)の名前になる。
何らかのシェルスクリプトの中でこの関数を実行すると、$0はそのシェルスクリプトの名称になる。
$ . script_file
ドットというシェルの組み込み関数を使用してシェルスクリプトを実行させると、中に含まれているコマンドは、現在のシェル上で動作することになる。
つまりドットコマンドを使うことで、シェルスクリプト内で定義された関数を現在のシェルから利用できるようになる。
環境設定をするシェルスクリプトは、ただ実行しても効果がないため名前の最後に.shを付け、ドットコマンドを使って実行するシェルスクリプトであることを明示することが多い。さらに直接実行しないように、モードは読み書きだけを許可し、ディレクトリも普通のコマンドとは分けておくようにする。