getoptコマンド(その2)


アニメ『ご注文はうさぎですか?』

はてな(?)が、一つのタイトルと、二つあるタイトルがあって、どちらから見れば正解なのかよくわからず、一つの方がから見はじめました。最近精力的に古いアニメを平らげ続けているので、本当に忙しい日々です。

getoptコマンドの続きです。
スクリプト化します。

takk@deb9:~$ cat -n test.sh
     1	#!/bin/bash
     2	for i in `getopt "abc" $@`;do 
     3	case $i in
     4		-a)
     5			echo "A"
     6			;;
     7		-b)
     8			echo "B"
     9			;;
    10		-c)
    11			echo "C"
    12			;;
    13	esac
    14	done

ショートオプション -a -b -cを指定すると、それぞれA B Cを表示するスクリプトです。

実行権限をつけて実行してみます。

takk@deb9:~$ chmod 755 test.sh
takk@deb9:~$ ./test.sh -b
B
takk@deb9:~$

オプションの指定順序が入れ替わってもちゃんと解析されます。

takk@deb9:~$ ./test.sh -bca
B
C
A
takk@deb9:~$ 

次は、値つきオプションを指定します。
ショートオプションの小文字の後に:(コロン)をつければ、値が指定できるようになります。

takk@deb9:~$ getopt "ab:c" -b3 -ac
 -b 3 -a -c --
takk@deb9:~$

これをスクリプトに組み込んでcase判定させたいですが、

set -- 引数

を使うと、位置パラメータが引数で更新されますので、これを使います。

takk@deb9:~$ cat -n test.sh
     1	#!/bin/bash
     2	set -- `getopt "ab:c" $@`
     3	while :;do
     4	  case $1 in
     5		-a)
     6			echo "A"
     7			;;
     8		-b)
     9			echo "B=$2"
    10			;;
    11		-c)
    12			echo "C"
    13			;;
    14		--)
    15			break
    16			;;
    17	  esac
    18	  shift
    19	done
takk@deb9:~$ 

実行してみます。

takk@deb9:~$ ./test.sh -b3 -ac
B=3
A
C
takk@deb9:~$ 

上手くいきました。

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA