シェルスクリプトのcase文による条件分岐と正規表現の解説
目次
UNIXシェルスクリプト マスターピース132(新しいタブで開く)という本のP.107にこんなシェルスクリプトが紹介されています。このシェルスクリプトは、拡張子に.htmと.htmlが混じったHTMLファイル群の拡張子を一括して.txtに変更するという意味を表しています。
#!/bin/bash for filename in * do case "$filename" in *.htm | *.html) # ファイル名の前の部分を取得 headname=${filename%.*} # ファイル名を.txtに変換 mv "$filename" "${headname}.txt" ;; esac done
本の解説とスクリプトの面構えを読んだら、なんとなく意味がわかります。が、自分が気になったのはお決まり文句の記法がよく分からなかったので、まとめておきます。
case文による条件分岐
case文による条件分岐の記法は、こんな感じになります。
signal="red" case "$signal" in red) echo "止まってください" ;; yellow) echo "注意してください" ;; green) echo "渡ってください" ;; esac
本で紹介されているスクリプトを見てまず戸惑ったのが、“)”(丸カッコとじ)と“;;”(ダブルセミコロン)です。これらはcase文のお決まり文句で前者は、各ケースを示し、後者はケースの終わりを示します。
|(パイプライン)の意味
次に戸惑ったのが、|(パイプライン)です。ただよく見ると調べなくともコード全体から漂う雰囲気でなんとなく分かります。これはorを表す基本正規表現です。
%.*の意味
最後に戸惑ったのが、8行目にある“%.*”です。これはシェルスクリプトの慣用句で「.(ドット) + 任意の文字列」を削除することを意味します。つまり”hoge.html” や”fuga.htm”ファイルの拡張子部分を取り出して、”hoge”や”fuga”の文字列に直すことなります。
プログラミング言語もお約束ごとは多いのですが、シェルスクリプトもお約束ごとは多いと思います。ただそのお約束ごとの内容が、特殊記号に関することが多くて学習するのに難儀する今日この頃です。
【参考サイト】