【Linux】シェルスクリプトの関数の使い方!一通りまとめ

シェルスクリプトの関数
  • このエントリーをはてなブックマークに追加
  • Pocket

プログラミングをやったことがある人にはお馴染みだろうが、シェルスクリプトでも関数を作ることができる。

関数とは処理をまとめて、何度も使えるようにしたものだ。

シェルスクリプトは、もともとあまり複雑なプログラムを組むのに適してはいないが、関数を少し使って効率良く作成するくらいであれば構わないだろう。

このページでは関数の使い方についてご紹介する。参考にしてほしい。

簡単に関数とは?

簡潔にいえば「処理をまとめたものが関数」である。中学校のとき習った次のような関数と同じだ。

y = 2x

xに何かを代入したら、yの値も決まる。

基本的に「引数を受け取り、それを処理し結果を返す」というのが役割である。とはいえ、引数を受け取らなくても動く関数もあるので、同じ動作を何度も書かないでしてくれる便利な方法だと思っておけばいい。

関数を使用すると同じ処理をするコードを繰り返し記述する必要がなくなるのである。

書式について

次のような書式になる。

function 関数名 () {
    処理...
}

もしくは「function」を省略して

関数名 () {
    処理...
}

とすることが出来る。関数を使うには、

関数名 引数

で使うことができる。

実際にやってみよう

書式をみせられてもピンとこないだろうと思うので実際に書いてみよう。

vi func-ex1.sh

実行結果

$ ./func-ex1.sh

関数の基本

関数の使い方の詳しいところ

関数の引数とパラメータ

関数の場合引数を受け取る場合も多々ある。関数の機能によっては引数をとらないこともあるが、以下の様にすると引数のパラメータを確認できる。基本的にスクリプト実行時のパラメータと使い方は同じである。

vi func-ex2.sh

実行結果

$ ./func-ex2.sh

func-ex2

戻り値について

bashシェルスクリプトには「戻り値」というものは基本的に存在しない。

解決策として関数やコマンドの「実行結果を直接変数に代入する」という手段をとることになる。「return」コマンドは存在するが、あくまで終了ステータスをかえしているだけで、関数の戻り値としての機能ではないので注意しよう。

vi func-ex3.sh

実行結果

$ ./func-ex3.sh

func-ex3

変数の範囲

基本的にbashは指定しない限り、変数はグローバルなものとして扱われる。「グローバル変数」とはどこからでも参照出来る変数のことだ。下記の例をみていただきたい。

vi func-ex4.sh

実行結果

$ ./func-ex4.sh

func-ex4

このようにtestfunc1の内部で宣言した変数が特殊なことなしにtestfunc2で参照できる、その他の場所からでもechoで参照できる。

現在一般的なコンピュータ言語とくらべるとその挙動はルーズなものかもしれないが、bashはインタプリタでありシェルである。機能上、環境変数などをグローバルに参照しなければならない。こういった作りのほうが都合がよいことが多いのだろう。

では「関数内だけのローカル変数は作成できないのか?」というと、ちゃんと仕組みは用意されている。「local」というビルドインコマンドを使用するとローカル変数を作成できる。

vi func-ex5.sh

実行結果

$ ./func-ex5.sh

func-ex5

このように「local」を使用すると関数内部だけで使用する変数を作成できる。

小さなスクリプトならばグローバル変数だけでも問題にはなりにくいが、規模が大きくなると「どこで変数の値が変化するのかわからなくなる」という状態が発生する。

そのため大きめのスクリプトを記述する時や、意図的に変数ローカルにし外部からの変更を受付ないようにする、といった状況で使用するといいだろう。

複数のファイルに分割して記述する

ファイルを分割して管理するほど、大規模になるとシェルスクリプトではなく他の本格的なコンピュータ言語による実装を考えた方がよいと思われるが、出来ないという訳ではない。例えば以下のようになる。

vi myfunc_rsq.func

vi func-ex6.sh

実行結果

$ ./func-ex6.sh

func-ex6

ここで重要なのは「.」である。

この「ドットコマンド」は他のスクリプトファイルを現在のカレントシェルに読み込み、変数や関数を使用出来るようにするコマンドだ。

これを活用することで、個々の断片的なスクリプトを取りこむことが出来るようになる。

まとめ

シェルスクリプトの関数についてまとめてきたが、いかがだっただろうか?

冒頭でもお伝えした通り、シェルスクリプトで大規模なプログラムを組むのはオススメしない。関数を少し使うくらいで止めておいたほうがいいだろう。

とはいえ、関数であれば使う場面は多いので、この機会に使い方は覚えてしまおう。

  • このエントリーをはてなブックマークに追加
  • Pocket

このページの続きや関連ページは下記から一覧で確認できる。

短期間でエンジニアになる方法

・「まったくの初心者だけどエンジニアになりたい!」

・「プログラマーとして転職をしたい!」

という方はリナックスアカデミーの資料を見てみてください。短期間で未経験からエンジニアになることができるスクールとして15年間選ばれ続けてきた理由やノウハウが載った資料です。

エンジニアの入り口に立つために必要な勉強技術の最新動向本当に使えるIT資格学習に役立つ国からの奨励金などの情報が詰まっています。

無料で2,3日中にお手元にお届けします。


資料を見てみる

SNSでもご購読できます。

コメントを残す

*