Linux

【Linux】シェルスクリプトでの関数の使い方を説明

シェルスクリプトの関数の使い方

Linuxの初心者向けに、シェルスクリプトの使い方、特に関数の使い方の基本を説明します。

シェルスクリプトの関数も、ほかのプログラミング言語と考え方は同じです。

プログラミング言語の初学者の人も、シェルスクリプトの関数の使い方を学んでいれば、ほかのプログラミング言語の学習時にも応用できるのではないかと思います。

この記事のまとめ!
  • 関数は、function 関数名 ()で定義し、{}内に処理を記載する。
  • 関数は、シェルスクリプト内で、関数名を記載することで呼び出すことができる。
  • 関数の戻り値とは、デフォルトで0(正常終了時)か0以外(異常終了時)である。returnを使えば、意図した戻り値を指定できる。
  • 関数の引数は、$1(第一引数)、$2(第二引数)、$3(第三引数)…というように記載する。

関数の基本

関数の定義

関数の定義の仕方は、

  1. function 関数名 () で関数名を定義する。※functionは省略可
  2. {} 内に処理を記載する。

では、具体的に以下のtest.shに、関数を定義します。

#!/usr/bin

#-----------------------------------------
#シェルスクリプト名:test.sh
#-----------------------------------------

function test(){          # function "関数名" ()で関数を定義できる
    echo "Hello World"  # {}の間に処理を記載する
}

しかし、関数は定義するだけでは意味がありません。シェルスクリプト内で関数を呼び出す必要があります。

それでは、これから関数の呼び出し方法を説明します。

呼び出し方法

関数の呼び出し方はとても簡単で、

  • シェルスクリプトの中で関数名を指定する

だけです。

では、具体的にtest.shの中で、関数"test"を呼び出してみます。(11行目)

#!/bin/bash

#-----------------------------------------
#シェルスクリプト名:test.sh
#-----------------------------------------

function test(){        # function "関数名" ()で関数を定義できる
    echo "Hello World"  # {}の間に処理を記載する
}

test                    # 関数を呼び出す

test.shを実行すると、

[root@localhost /]# . /script/bin/test.sh
Hello World

と、関数test内の処理が実行されて、結果が表示されていることが分かります。

※参考

シェルスクリプトの実行方法は、以下です。

.(ドット) + (半角スペース) + スクリプトのパス名

関数の戻り値とは

シェルスクリプトの関数の戻り値はデフォルトで、

  • 関数が正常終了時・・・0
  • 関数が異常終了時・・・0以外

となります。

また、"return"を利用することで、意図した戻り値を取得することもできます。

では、test.shのデフォルトの戻り値を確認します。(12行目の$?で戻り値を取得できます)

#!/bin/bash

#-----------------------------------------
#シェルスクリプト名:test.sh
#-----------------------------------------

function test(){        # function "関数名" ()で関数を定義できる
    echo "Hello World"  # {}の間に処理を記載する
}

test                    # 関数を呼び出す
echo $?                 # $?で直前に実行した関数の戻り値を取得する

test.shを実行すると、

[root@localhost /]# . /script/bin/test.sh
Hello World
0

となり、値0が標準出力に表示され、直前の関数testが正常終了していることが分かります。

returnを使う場合は、例えば以下のようなシェルスクリプトになります。

#!/bin/bash

#-----------------------------------------
#シェルスクリプト名:testReturn.sh
#-----------------------------------------

function testReturn(){
    ANS=`expr 10 + 20`                  # 変数ANSに10+20の結果を代入
    if [ ${ANS} -gt 10 ]; then
        return 1
    else
        return 2
    fi
}

testReturn
echo $?

testReturn.shを実行すると、

[root@localhost /]# . /script/bin/testReturn.sh
1

となり、if内で定義したreturn値1を取得していることが分かります。

関数の引数とは

引数とは、シェルスクリプトを実行するときに、コマンドラインからシェルスクリプトに渡してあげる数値や文字列のことです。

シェルスクリプトの中では、

  • 一つ目の引数を$1
  • 二つ目の引数を$2
  • 三つ目の引数を$3
  • ・・・

と認識します。

では、以下の具体例で説明します。testArgument.shでは、引数として数値を2つ受け取り、その2つの数値の足し算結果を表示します。

#!/bin/bash

#-----------------------------------------
#シェルスクリプト名:testArgument.sh
#-----------------------------------------

a=$1                            # 第一引数を変数aに代入
b=$2                            # 第二引数を変数bに代入

function testArgument(){
    ANS=`expr ${a} + ${b}`      # 変数ANSに引数の足し算結果を代入
    echo ${ANS}
}

testArgument

このシェルスクリプトに対して、引数を二つ(例えば、10と20)を指定して実行すると、

[root@localhost /]# . /script/bin/testArgument.sh 10 20
30

となり、シェルスクリプト内の関数が、引数の10と20を受け取り、計算結果を返していることが分かります。

まとめ

今回は、シェルスクリプトの関数の使い方の基本を説明しました。

シェルスクリプトを学び始めた方々のご参考になれば、幸いです。