
したがって、私のスクリプトでは、パラメータの1つが有効なEメールアドレスであることを確認する必要があります。試しましたが失敗しました。
if $maddr="^.$*\(@\)\(*\)\(.\)\(??*\)"
then
...
これは、少なくとも1文字、後ろに@、その後に何もなく、その後にドットが来、その後に少なくとも2つの文字が来ることを意味します。
答え1
文字列を正規表現に一致させるUnixツールは次のとおりですexpr
。
if expr "$maddr" : '..*@.*\...' > /dev/null; then...
(正規表現は暗黙的にexpr
最初に固定されています。)
この場合、単純なシェルパターンマッチングで十分です。
case $maddr in
?*@*.??*) ...
esac
一部のシェル(たとえばzsh
、ksh93
および)には、標準構文の上に拡張機能bash
として正規表現一致演算子が組み込まれていますが、構文はこれらのシェル間でわずかに異なります。sh
pattern='.@.*\...'
if [[ $maddr =~ $pattern ]]; then...
3つすべてで動作する必要があります。
(これらのパターンは有効なメールアドレスを保証しません。)
答え2
_vaddr() { { cat
printf %s\\n "$@"
} | grep -o '[^ ]*@[^ ]*' |
grep -q "$REGEX" && {
$DO_SUCCESS
} || $HANDLE_FAILURE
}