====== シェルスクリプトのオプション処理 ====== シェルスクリプトにオプションを追加したいことがある。[[https://linuxjm.osdn.jp/html/util-linux/man1/getopt.1.html|getopt]]やgetoptsもあるのだが、独自形式にしたければ自分で定義して書けばよい。 ===== getopts使用例 ===== getoptsを使う場合はこのような書き方になる。 #!/bin/sh while getopts ab opt do case $opt in a) echo "Option -a" ;; b) file="$2" echo "Option -b file=${file}" shift ;; *|-) break ;; esac done echo "file=${file}" echo "args: $*" オプション指定時にはこのようになる。 $ ./test-getopts.sh -a -b xxx yyy zzz Option -a Option -b file=-b Option -b file=xxx file=xxx args: xxx yyy zzz オプション[-b]が2回呼び出されているものの、最終的には必要な変数設定ができている。\\ ただし、**xxx**がbreak条件にあたるので、**xxx**が残った状態になる。 ===== getopts無し ===== 1文字オプション以外にしたければ次のように書くこともできる。 #!/bin/sh while [ -n "$1" ] do case "$1" in -abc) echo "Option -abc" ;; -xyz) file="$2" echo "Option -xyz file=${file}" shift ;; *|--) break ;; esac shift done echo "file=${file}" echo "args: $*" オプション指定時にはこのようになる。 $ ./test-optarg.sh -abc -xyz aaa bbb Option -abc Option -xyz file=aaa file=aaa args: bbb