シェルスクリプトでのユーザ関数
#18 関数を使ってみよう
http://dotinstall.com/lessons/basic_shellscript/10618
を参考に
シェルスクリプトでのユーザ関数について学習
シェルスクリプトでのユーザ関数の作成は
function 関数名(){
行いたい処理
}
そして呼び出すときには
関数名
だけでOK
もし
function hello(){
#行いたい処理
}
なら
関数呼び出しは
hello
となる
実際にやってみると
vim myfunc.sh
内容は
#!/bin/bash
function hello(){
echo “hello shell script”
}
hello
として保存
chmod +x myfunc.sh
,/myfunc.sh
とすると
hello shell script
と表示される
ちなみに、
function は省略可能
シェルスクリプトでの関数の引数は
コマンドと同じように $1 $2 というように引数の数に$をつけて指定する
そして、引数を指定するときには
ユーザ関数の横にスペースで区切って
引数を記述する
例えば
!/bin/bash
function hello(){
echo “friends name $1 $2”
}
hello Mike Tom
これを実行すると
friends name Mike Tom
となる
そして、他のプログラム言語とちがうのが
変数の有効範囲
PHP Java Script C++ などでは
基本的に関数のスコープのそとにかいたものが
グローバル変数
スコープの中に書いたものがローカル変数となる
しかし、シェルスクリプトの場合
ローカル変数であると宣言する
local を変数の前につけないと
グローバル変数扱いになるので注意
まず、local なしの場合
#!/bin/bash
function hello(){
echo “hello shell script”
echo “friends name $1 $2”
i=5
echo $i
}
hello Mike Tom
echo $i
これだと、実行すると
hello shell script
friends name Mike Tom
5
5
となり、$i に関数の外からアクセスできているので
表示されている
次は、local 宣言した場合
#!/bin/bash
function hello(){
echo “hello shell script”
echo “friends name $1 $2”
local i=5
echo $i
}
hello Mike Tom
echo $i
これで実行すると
hello shell script
friends name Mike Tom
5
となり、関数の外からアクセスできなくなっているのが
わかる
ちょっとした違いに見えるけど
間違えると予期せぬ動きに悩まされるので注意