シェルスクリプトを作るときに処理を簡単に分岐できてグンと使いやすくなる、そんな引数を受け取る方法をご紹介。
まず、今回登場していただくのは『getopts』というもの。これを使うことで簡単にユーザーが打った引数を受けることができます(`・ω・´)
何はともあれ基本形を超シンプルに書いてみました↓
#!/bin/bash
while getopts e: OPT #OPTの部分は何でもOK
do
case $OPT in #上で指定した変数名を指定
e) num=$OPTARG #ここは決まりで$OPTARGで受け取ることが出来る
;;
esac
done
echo $num #-e の後ろに指定された値が入る
3行目の『e:』の意味は、『hoge.sh -e』で引数を受けますよという宣言。6行目は普通のcase文ですが、引数として『-e “ココ”』が入ってくるとその値が $OPTARG に格納されます。
実行結果↓
./hoge.sh -e "うひょ" うひょ
実際、上記のような使い方は意味がないので、『-e 1』とかそれっぽく引数を取り、処理を分岐までやってみます。↓
#!/bin/bash
while getopts e:p: OPT #-p も追加してみる
do
case $OPT in
e) e_num=$OPTARG
;;
p) p_num=$OPTARG
;;
esac
done
case $e_num in
1) echo "今月は1月です"
;;
2) echo "今月は2月です"
;;
3) echo "今月は3月です"
;;
esac
case $p_num in
1) ping -c1 google.com
;;
2) ping -c1 yahoo.co.jp
;;
3) ping -c1 adobe.com
;;
esac
実行結果↓
./hoge.sh -e1 今月は1月です ./hoge.sh -e2 今月は2月です ./hoge.sh -e3 今月は3月です ./hoge.sh -p1 PING google.com (173.194.120.67) 56(84) bytes of data. 64 bytes from nrt13s18-in-f3.1e100.net (173.194.120.67): icmp_seq=1 ttl=58 time=2.39 ms #以下省略
上記の通り -e と -p そしてその後ろの数字によって処理が分かれていますね。
いかがでしたか?
今回はシェルスクリプトで引数を受けて、処理を分岐させる方法をご紹介しました。みなさんもこれで自分オリジナルのクールなコマンドを作ってみてください。
