関数定義 (シェルスクリプト)
[履歴] [最終更新] (2016/06/03 21:54:13)
最近の投稿
注目の記事

概要

シェル関数は複数のコマンドをひとまとめにしたものです。引数の取得では、シェルスクリプトの引数と同じ名称の特殊変数を使用します。また、独自のローカル変数を用意することができないため、関数外で使用されている変数の内容を書き換えてしまう危険性があります。

シェル関数は複数のコマンドをまとめたもの

sample.sh

#!/bin/sh
echo1(){
    echo 1
}
echo1

実行例

$ sh sample.sh
1

一行でまとめるためには、セミコロンが必要です。

sample.sh

#!/bin/sh
echo1(){ echo 1; }
echo1

実行例

$ sh sample.sh
1

関数のためのローカル変数は用意不可

シェルスクリプトでは、関数のためのローカル変数が用意できません。関数内で変数を使用するときは注意しましょう。

sample.sh

#!/bin/sh
VAR=128
func(){
    VAR=256
}
func
echo $VAR

実行例

$ sh sample.sh
256

関数の引数

こちらのページで紹介しました、シェルスクリプトの引数と全く同じ名称の特殊変数で関数の引数を取得できます。UNIXによっては、関数呼び出し時にシェルスクリプトの引数が格納されていた$1,$2,...の内容を上書きしてしまうため、事前に他の変数に保存しておくなどの工夫が必要です。

sample.sh

#!/bin/sh
func(){
    echo $#
    echo $1
}
func 128 dummy dummy

実行例

$ sh sample.sh
3
128

関数の返り値

こちらのページで紹介しました、直前に実行したコマンドの終了ステータスが格納される特殊変数を利用して関数からの返り値を取得します。

sample.sh

#!/bin/sh
func(){
    return 8
}
func

echo $?

実行例

$ sh sample.sh
8
関連ページ