🍎

シェルスクリプトにオプションをつける

2024/11/21に公開

はじめに

社内ハッカソンでシェルスクリプトを作りました。
オプションを設定する時に、あまり良さげな記事が見つからなかったので備忘録として残します。

コード

echo_usage() {
    echo "Usage: $0	[-u|--url <URL>]
			[-n|--name <YOUR NAME>]"
}

while [[ "$#" -gt 0 ]]; do
    case "$1" in
        -u|--url)
            echo "url is $2"
            shift 2
            ;;
	-n|--name)
	    echo "name is $2"
	    shift 2
	    ;;
        -h|--help)
	    echo_usage
            exit 0
            ;;
        *) # 不明なオプションが指定された場合
            echo "Unknown option: $1"
	    echo_usage
            exit 1
            ;;
    esac
done

実行例

sh option.sh -u zenn.dev

url is zenn.dev
sh option.sh -h

Usage: option.sh	[-u|--url <URL>]
			[-n|--name <YOUR NAME>]
sh option.sh -g

Unknown option: -g
Usage: option.sh	[-u|--url <URL>]
			[-n|--name <YOUR NAME>]

解説

  • $0
    • シェルのファイル名を指します。option.shなどの文字になります。
  • $1,2..n
    • コマンド実行時に渡された引数を指します。$1は1番目の引数、2は2番目、nはn番目の引数です。
    • sh option.sh -u google.com だと$1は-u、$2はgoogle.comになります。
  • "$#" -gt 0
    • $#
      • 引数の数です。sh option.sh -u google.comだと2になります。
    • -gt
      • grater than(より大きい)の略称で、javascriptでいう>です。
      • シェルスクリプトの比較演算子わかりづらい。。
    • 引数の数が0より大きい時に真となる条件です。
  • shift
    • 引数を左にシフトします。shift nを実行するとnの数だけ引数が左にシフトします。
    • $1でオプションの指定と$2でオプションの内容を確認して、確認が終わったらshift 2でシフトします。
NCDCエンジニアブログ

Discussion