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:~$
コメント