Bash、コマンド引数の自前処理サンプル

タグ: Bash  

getopt(s)はいろいろと制限があるため、自前で実装しました。サンプルを忘れがちなので、メモ記事です。

#!/bin/bash

# 引数の処理サンプル

for i in "$@"
do
    case $i in
        -d|--default) # 値を取らないオプション
            option="default"
            default="yes"
            shift
            ;;
        -j=*|--job=*) # 値を=で指定するオプション
            option="job"
            job="${i#*=}"
            shift
            ;;
        -w|--work) # 値をスペースで区切るオプション
            option="work"
            shift
            ;;
        *) # その他
            if [[ $i =~ ^-.* ]] # ハイフンで始まる場合を正規表現でチェック
            then
                option=""
            fi
            case "${option}" in
                work)
                    work+=("${i}") # 配列へ
                    shift
                    ;;
                *)
                    echo "Usage: $0 [-d|--default] [-j|--job=ジョブ] [-w|--work 作業1 [作業2...] ] )]" 1>&2
                    exit 1
                    ;;
            esac
    esac
done

if [ -n "${default}" ]
then
    echo "Set default"
fi

if [ -n "${job}" ]
then
    echo "Set job to ${job}"
fi

if [ ${#work[*]} -gt 0 ] # 配列の要素数を調べる
then
    echo "Set work to ${work[@]}" # 配列を空白区切りでつなげる決まった記述法
fi

引数の値を=で指定するときは引数は一つ、空白で区切って指定する場合は複数指定可能にしてあります。

引数の正当性チェックのロジックは入っていません。