getopts(bash組み込みコマンド)

2013年10月「ノイタミナ」新番組告知

アニメ『ガリレイドンナ』(2013)

理系女子。一人でガリレオ号作る技術力はすごい。一人で、武装した空飛ぶ乗り物を作ることは、何十年かけてもできる気がしません。

bashの組み込みコマンドであるgetoptsを使います。
簡単なスクリプトで動きを確認します。

takk@deb9:~$ cat -n test.sh
     1	#!/bin/bash
     2	
     3	getopts "abc" ret $@
     4	echo $ret
     5
takk@deb9:~$ 

getoptsの第1引数には指定可能なオプション。第2引数は、解析結果を格納する変数名、
第3引数にオプションを指定します。

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

getoptsを一回実行するだけでは、複数のオプションを指定しても、結果が得られません。

takk@deb9:~$ ./test.sh -bc
b
takk@deb9:~$ 

2回実行するスクリプトに変更。

takk@deb9:~$ cat -n test.sh
     1	#!/bin/bash
     2	
     3	getopts "abc" ret $@
     4	echo $ret
     5
     6	
     7	getopts "abc" ret $@
     8	echo $ret
     9
takk@deb9:~$ 

オプションを2つ指定して実行してみます。

takk@deb9:~$ ./test.sh -bc
b
c
takk@deb9:~$ 

このように2回目のgetoptsの実行時に、2つ目のオプションが解析されます。

getoptsの戻り値も合わせて確認してみましょう。

takk@deb9:~$ cat -n test.sh
     1	#!/bin/bash
     2	
     3	getopts "abc" ret $@
     4	echo -e $? $ret
     5	
     6	getopts "abc" ret $@
     7	echo -e $? $ret
     8	
takk@deb9:~$ 

オプションが1つの場合は、1回目のgetoptsの戻り値は、真(0)が返り、2回目のgetoptsの戻り値は、偽(0より大きい数字)が返ります。

takk@deb9:~$ ./test.sh -b
0 b
1 ?
takk@deb9:~$ ./test.sh -bc
0 b
0 c
takk@deb9:~$ 

これを利用して、whileを使い、繰り返し処理にします。getoptsの戻り値が0の場合は、ずっと回り続けます。

takk@deb9:~$ cat -n test.sh
     1	#!/bin/bash
     2	
     3	while getopts "abc" ret $@
     4	do
     5	  echo -e $ret
     6	done
     7	
takk@deb9:~$ 

実行結果。

takk@deb9:~$ ./test.sh -bc
b
c
takk@deb9:~$ 

オプションに値を与えたいときは、やはり:(コロン)を指定します。

takk@deb9:~$ cat -n test.sh
     1	#!/bin/bash
     2	
     3	while getopts "ab:c" ret $@
     4	do
     5	  echo -e $ret $OPTARG
     6	done
     7	
takk@deb9:~$ 

値は、OPTARGに格納されます。

takk@deb9:~$ ./test.sh -a -b3
a
b 3
takk@deb9:~$ 

コメント

タイトルとURLをコピーしました