シェルスクリプトで引数を受ける方法


シェルスクリプトを作るときに処理を簡単に分岐できてグンと使いやすくなる、そんな引数を受け取る方法をご紹介。

まず、今回登場していただくのは『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 そしてその後ろの数字によって処理が分かれていますね。

いかがでしたか?
今回はシェルスクリプトで引数を受けて、処理を分岐させる方法をご紹介しました。みなさんもこれで自分オリジナルのクールなコマンドを作ってみてください。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>