Categories: shellscript

シェルスクリプトにおける引数の使い方を解説

シェルスクリプトを作成する際、引数を与えて実行することができます。

ここでは、引数の基本的な取り扱いから、引数の数をカウントする方法、引数をオプションとして扱う方法までを解説します。

引数の基本

シェルスクリプトに引数を渡すと、それらの引数は特殊な変数でアクセスできます。引数は$1, $2, $3 などでアクセスでき、 $0はスクリプト自身の名前を示します。

#!/bin/bash

echo "スクリプト名: $0"
echo "1番目の引数: $1"
echo "2番目の引数: $2"

上記のスクリプトをtest.sh という名前で保存し、以下のように実行します。

bash test.sh one two

すると、下記のような実行結果が得られます。

引数の数をカウントする方法

引数の数を知りたい場合は、$#を使用します。この変数はスクリプトに渡された引数の数を示します。

#!/bin/bash

echo "引数の数: $#"

引数のデフォルト値

引数が指定されなかった場合にデフォルト値を設定することも可能です。これにより、引数が提供されなかった場合でもスクリプトが正しく動作します。

#!/bin/bash

# 引数が指定されていない場合のデフォルト値
input=${1:-def_value}

echo "入力値: $input"

上記スクリプトは、コマンドラインから引数が渡された場合、その値を($1) をinput変数に格納し、引数が渡されなかった場合は def_valueというデフォルト値をinput変数に格納します。

input=${1:-def_value}:

  • input: 変数名です。
  • $1: コマンドラインから渡された最初の引数を表します。
  • :-: この演算子は、$1が空文字か未定義の場合に、def_valueを代入します。つまり、引数が指定されていない場合にデフォルト値を設定する働きをします。

オプション引数の処理

オプション引数を処理するためには、getoptsコマンドを使用するのが一般的です。getoptsは、コマンドラインオプションを解析するための便利なツールです。

while getopts "a:b:" opt; do
  case $opt in
    a)
      echo "オプション -a が指定されました: $OPTARG"
      ;;
    b)
      echo "オプション -b が指定されました: $OPTARG"
      ;;
    \?)
      echo "無効なオプションです。"
      exit 1
      ;;
  esac
done

以下のような実行結果が得られます。

以下にスクリプトについて解説します。

while getopts “a:b:” opt; do:

  • getopts: コマンドライン引数のオプションを解析するコマンドです。
  • “a:b:”: 解析対象となるオプションを指定します。:は、そのオプションに引数が必要であることを意味します。
  • opt: 解析結果が格納される変数名です。
  • whileループ: 指定された全てのオプションが解析されるまで繰り返します。

case $opt in: $optの値によって異なる処理を行います。

  • a): -aオプションが指定された場合の処理。$OPTARGには-aオプションに続く引数が格納されます。
  • b): -bオプションが指定された場合の処理。$OPTARGには-bオプションに続く引数が格納されます。
  • \?): 不明なオプションが指定された場合の処理。エラーメッセージを表示してスクリプトを終了します。

done: whileループの終了を示します。

まとめ

シェルスクリプトで引数を扱う方法をマスターすることで、スクリプトの汎用性と柔軟性が大幅に向上します。

この記事で紹介した基本的な技術を活用して、より効率的なスクリプト作成に役立ててください。

Haruoka