bash プログラミング:if 文と case 文
bash には条件分岐として「if」文と「case」文がある。そこで今回は、それらについての文法などを解説する。
if 文
if 文の文法は次の通りである。
if list; then list; [ elif list; then list; ] … [ else list; ] fi |
使用する条件文は終了ステータスを返すコマンドならば何でも良く、サブプロセスとして複数のコマンドを実行しても良い。
#!/bin/bash if [ $# -lt 1 ]; then echo “引数がありません。”; elif ( echo $1 | gawk –re-interval ‘/^a/ { exit 0; } { exit 1 ;}’ ); then echo “引数が「a」から始まっています。”; else echo “引数が「a」以外から始まっています。”; fi exit 0; |
上記の内容を「3.sh」として保存し、「chmod +x 3.sh」としてから実行。
$ ./3.sh 引数がありません。 $ ./3.sh a 引数が「a」から始まっています。 $ ./3.sh bc 引数が「a」以外から始まっています。 $ |
case 文
case 文の文法は次の通りである。
case word in [ [(] pattern [ | pattern ] … ) list ;; ] … esac |
case 文で用いるパターン(正規表ではない)はファイルパターンに近く、「?」1文字に一致、「[0-9a-zA-Z]」英数字に一致、「*」すべての文字列に一致する。
また、「”」で囲むとパターンではなくなり、その文字そのものとなる。
!/bin/bash if [ $# -lt 1 ]; then echo “引数がありません。”; exit 0; fi case $1 in ( a* ) echo “引数が「a」から始まっています。”; echo “case 文から出ます”; ;; ( “*” ) #「*」という文字列に一致 echo “「*」という文字列に一致しました”; echo “case 文から出ます”; ;; ( * ) echo “引数が「a」以外から始まっています。”; echo “case 文から出ます”; ;; esac exit 0; |
上記の内容を「4.sh」として保存し、「chmod +x 4.sh」としてから実行。
$ ./4.sh a 引数が「a」から始まっています。 case 文から出ます $ ./4.sh ‘*’ 「*」という文字列に一致しました case 文から出ます $ ./4.sh bc 引数が「a」以外から始まっています。 case 文から出ます $ |