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
引数の値を=で指定するときは引数は一つ、空白で区切って指定する場合は複数指定可能にしてあります。
引数の正当性チェックのロジックは入っていません。