Yura YuLife

ITエンジニアの覚え書き。

シェルスクリプトで正規表現マッチ

シェルスクリプトで引数による条件分岐をする際にif文の列挙やcase文を利用する場合は多々あると思いますが、 単純に引数のチェックのみを行いたいときはbash正規表現マッチで調べるのが簡単です。

bashでの正規表現マッチ

例えば、第一引数が正規表現^h.+ge$とマッチしているかを調べる場合には、以下のように記述します。

if [[ "$1" =~ ^h.+ge$ ]]; then

if文内で=~で比較すると正規表現比較になります。 このとき、正規表現はダブルクォートで囲わない点に注意。囲ってしまうと普通の文字列比較になってしまいます。

#!/bin/bash
# 第一引数は start, stop, restartのいずれか

if [ $# -ne 1 ];then
    echo "Usage: $ ./hoge.sh (start|stop|restart)"
elif [[ "$1" =~ ^(start|stop|restart)$ ]]; then
    /path/to/hoge $1
else
    echo "不明な引数です: $1"
    exit 1
fi

参考URL