ShellScriptでEmailをバリデーションしてみる

1 min read読了の目安(約1400字

ShellScriptでEmailをバリデーションしてみる

ちょっとしたスクリプトを作成するときふとバリデーションをかけてみたくなったのでメモとして残しておく。

目標

  • Emailのinputしたときxx@xxx.xxx等のフォーマットでバリデーションしたい
  • 間違えて入力した時のために再度inputを求めるようにしたい

環境

  • macOS Bigsur 11.1
  • zsh

実装

case文を使ってEmailを判定する

ARGS="Email"
case $ARGS in
    "Email"  ) echo $ARGS ;;
    * ) echo "not Email" ;;
esac

case文は変数の値を判定して結果を返す[1]

また、Emailの判定は正規表現を使うと良さそう[2]

xxx@xxx.xxx validation format
 *@?*.?*

また目標の一つである「間違えて入力した時のために再度inputを求めるようにしたい」を実現するためにfunctionで関数内で再帰させる。

funcrion sample() {
ARGS=${1}
case $ARGS in
    "Email"  ) echo $ARGS ;;
    * ) echo "not Email" ; read ARGS ; sample $ARGS  ;;
esac

これで、再入力をすることができる。

最終的には以下のようになります。

emailValidation.sh
function emailValidation() {
    ARGS=${1}
    case $ARGS in
        # xxx@xxx.xxx validation format .
     *@?*.?*) echo "accept" ;;
      *) echo "Your input email address data is incorrect format , Please retry ."; /bin/echo -n "» " ; read email; emailValidation $email ;;
    esac
}

# call emailValidation

read email
emailValidation $email

これで完了です。

※間違い、誤植等、発見されましたらご指摘、ご指南いただけると幸いです。

脚注
  1. 「3分理解!シェルスクリプトでのcaseの使い方」 https://eng-entrance.com/linux-shellscript-case ↩︎

  2. 「Shell Programming and Scripting EMail Address Validation (Shell Script)」https://www.unix.com/shell-programming-and-scripting/110157-email-address-validation-shell-script.html ↩︎