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