シェルスクリプトマガジン

シェルスクリプトの書き方入門(Vol.70記載)

著者:大津真

本連載ではシェルスクリプトの書き方をやさしく紹介します。対象とするシェルは、多くのLinuxディストリビューションが標準シェルとして採用する「Bash」です。最終回となる今回は、関数について解説します。

シェルスクリプトマガジン Vol.70は以下のリンク先でご購入できます。

図1 シェルスクリプト「hello1.sh」の内容

#!/bin/bash
function hello() {
    echo "Hello Function"
}

hello
hello
hello

図2 シェルスクリプト「param_test1.sh」の内容

#!/bin/bash
function param_test() {
    echo "\$0: $0"
    echo "\$1: $1"
    echo "\$2: $2"
    echo "\$3: $3"
    echo "\$4: $4"    
    echo "\$#: $#"
    echo "\$@: $@"
}

param_test 春 夏 秋 冬

図3 シェルスクリプト「scope1.sh」の内容

#!/bin/bash
function scope_test() {
    g1="グローバル"
    local l1="ローカル"
}

scope_test
echo "g1: $g1"
echo "l1: $l1"

図4 シェルスクリプト「file_test1.sh」の内容

#!/bin/bash
function check_file() {
    if [[ -f $1 ]]; then
        echo "ファイルが存在します"
        return 0
    else
        echo "$1が見つかりません"
        return 1
    fi
}

if [[ $# -eq 0 ]]; then
    echo "引数でファイルを指定してください"
    exit 1
fi

check_file $1
echo "終了ステータス: $?"

図5 ライブラリファイル「my_lib.sh」の内容

function check_file() {
    if [[ -f $1 ]]; then
        echo "ファイルが存在します"
        return 0
    else
        echo "$1が見つかりません"
        return 1
    fi
}

図6 シェルスクリプト「file_test2.sh」の内容

#!/bin/bash
source ./my_lib.sh

if [[ $# -eq 0 ]]; then
    echo "引数でファイルを指定してください"
    exit 1
fi

check_file $1
echo "終了ステータス: $?"

図7 シェルスクリプト「sum_test1.sh」の内容

#!/bin/bash
function calc_sum() {
    sum=0
    for n in $(seq $1)
    do
        sum=$(expr $sum + $n)
    done
    echo $sum
}
# 引数があるかどうかのチェック
if [[ $# -eq 0 ]]; then
    echo "引数を指定してください"
    exit 1
fi
# 引数が整数値であることを調べる
expr $1 + 1 &> /dev/null
if [[ $? -ge 2 ]]
then
    echo "整数値を指定してください"
    exit $?
fi    
# calc_sum関数を呼び出す
echo "1から$1までの総和: $(calc_sum $1)"

図8 シェルスクリプト「test1.sh」の内容

#!/bin/bash
num=10
sum=0
for n in $(seq $num)
do
    sum=$(expr $sum + $n)
done
echo "総和: $sum"