入力文字列が特定の形式に準拠しているかどうかを確認するには?

入力文字列が特定の形式に準拠しているかどうかを確認するには?

ユーザーは次のように私のBashスクリプトにmacアドレスを書き込むことができます:

read -p "enter mac-address " mac-address

これで、このMacアドレスが「特定の」形式と一致することを確認するためにifステートメントを確認したいと思います。つまり、FF:FF:FF:FF:FF:FFではないことでなければなりませんFFFFFFFFFFFF。長さも6x2で正確でなければなりません。

ベストアンサー1

最も怠惰な方法は走ることです

if [[ $mac_address == ??:??:??:??:??:?? ]]; then echo Heureka; fi

ただし、これは16進文字列であることを確認しません。だから重要なことなら

if [[ $mac_address =~ ^[0-9a-fA-F][0-9a-fA-F]:[0-9a-fA-F][0-9a-fA-F]:[0-9a-fA-F][0-9a-fA-F]:[0-9a-fA-F][0-9a-fA-F]:[0-9a-fA-F][0-9a-fA-F]:[0-9a-fA-F][0-9a-fA-F]$ ]]; then echo Heureka; fi

より良いかもしれません。後者は次のように短縮できます。

if [[ $mac_address =~ ^([[:xdigit:]]{2}:){5}[[:xdigit:]]{2}$ ]]; then
    echo Heureka; 
fi

パターンが一致すれば、長さが合っていることを確認する必要もないと思います。

おすすめ記事