どうも、シローです。
シェルスクリプトも他のプログラミング言語と同じく、関数を作ることができます。
今回は関数の使い方についてまとめていきます。
関数について
プログラムにおいて一連の処理において、一部を置き換えて何回も実行したいというケースがある。
- 数値を引数にして、計算式を実行
- ファイル名を引数にして、テキストファイルを生成
などなど
こういった、可変の情報を受け取って、一定の処理をするものを関数という。
シェルスクリプトにおける関数の定義、呼び出し方
シェルスクリプトにおける関数は次のように記述する。
// 関数の宣言 関数名() { 処理 } // 関数の実行 関数名 引数1 引数2
PHPやJavaScriptとは
- 関数の宣言に引数を決める部分が無く
- 実行するときには
関数名(引数1, 引数2)
ではなく、関数名 引数1 引数2
という記述になる
部分が異なる
また、関数の実行部分よりも前に関数を宣言しないといけないのもポイントである。
関数に渡された引数を呼び出す
関数に渡した引数は渡した順番通りに$1
,$2
,$3
といった値に渡されます。
サンプル:三角形の面積を計算する関数
小数点の計算にはbc
コマンドを使用している。
calc_try.sh
#!/bin/bash // 関数の宣言 calc() { height=$1 bottom=$2 echo "scale=2; ${height} * ${bottom} / 2" | bc } // 実行 result=$(calc 3 5) echo ${result}
実行
$ bash calc_tri.sh 7.50
変数のスコープ
基本的に関数の外で定義した変数を関数内で参照することはできます。また、関数内で上書きすると、関数の実行後もその変数の値は上書きされたままになります。
fparam.sh
#!/bin/bash update() { name=taro echo "inside: ${name}" # taro } name=shiro echo "outside: ${name}" # shiro update echo "outside: ${name}" # taro
実行
bash fparam.sh outside: shiro inside: taro outside: taro
関数内でのローカル変数
変数を関数の中だけに影響させたい場合は、local
を変数の前につけます。
local_fparam.sh
#!/bin/bash update() { local name=taro echo "inside: ${name}" # taro } name=shiro echo "outside: ${name}" # shiro update echo "outside: ${name}" # shiro
実行
bash local_fparam.sh outside: shiro inside: taro outside: shiro
通常は、関数内で関数外の変数を上書きしたりすると、エラーの原因がよく分からなかったりする原因になるのでlocal
をつけて関数内でしか適用しないようにするみたいです。
まとめ
- 関数の宣言を先に書いてから、関数を実行する
- 関数に渡した引数は位置パラメータ($1,$2,$3...)に渡される
- 関数の外で渡した変数を参照できる、また上書きすることもできるが、
local
をつけることで関数内に限定させることができる
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.