🍎
シェルスクリプトにオプションをつける
はじめに
社内ハッカソンでシェルスクリプトを作りました。
オプションを設定する時に、あまり良さげな記事が見つからなかったので備忘録として残します。
コード
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,
n2.. - コマンド実行時に渡された引数を指します。$1は1番目の引数、
nはn番目の引数です。2は2番目、 - sh option.sh -u google.com だと$1は-u、$2はgoogle.comになります。
- コマンド実行時に渡された引数を指します。$1は1番目の引数、
- "$#" -gt 0
- $#
- 引数の数です。sh option.sh -u google.comだと2になります。
- -gt
- grater than(より大きい)の略称で、javascriptでいう>です。
- シェルスクリプトの比較演算子わかりづらい。。
- 引数の数が0より大きい時に真となる条件です。
- $#
- shift
- 引数を左にシフトします。shift nを実行するとnの数だけ引数が左にシフトします。
- $1でオプションの指定と$2でオプションの内容を確認して、確認が終わったらshift 2でシフトします。
NCDC株式会社( ncdc.co.jp/ )のエンジニアチームです。 募集中のエンジニアのポジションや、採用している技術スタックの紹介などはこちら( github.com/ncdcdev/recruitment )をご覧ください! ※エンジニア以外も記事を投稿することがあります
Discussion