2011-06-29 30 views
0

我有一個useradd bash腳本,它要求用戶輸入創建用戶的電子郵件地址。這是因爲用戶在創建帳戶時通過電子郵件收到他的用戶名/密碼。BASH如果比較強制輸入有效的電子郵件地址格式

目前這部分代碼很簡單:

echo Enter the users e-mail address 
read ADDRESS 

什麼我發現是,有時,當運營商運行腳本他們entereing空白信息。我怎樣才能放置一個if語句來強制他們輸入電子郵件地址格式。

我試過下面的代碼,但它不起作用。這個想法至少是驗證他們使用@符號。

if [[ $string != "@" ]] ; then 
    echo You have entered an invalid e-mail address! 
    exit 1 
else 
    # do something 
fi 
+0

http://stackoverflow.com/questions/2138701/email-check-regular-expression-with-bash-script –

回答

1

!=試驗確切的不平等:字符串必須是完全@沒有別的。兩種方法可以做到你想要的測試是

case "$string" in 
*@*) 
    ;; 
*) 
    echo You have entered an invalid email address! >&2 
    exit 1 
    ;; 
esac 

if ! expr "$string" : '.*@' >/dev/null; then 
    echo You have entered an invalid email address! >&2 
    exit 1 
fi 

您需要的結果從expr重定向,因爲它會打印匹配的長度。還要注意,case使用shell球,而expr使用POSIX基本正則表達式(所以你不能使用+,?等);你需要引用傳遞給expr的正則表達式,所以shell不會擴展它,但是對於case而言,整個問題的關鍵是讓shell擴展它。

我通常更喜歡case之一,除非我真的需要一個正則表達式。

+0

實際工作中,我的bash手冊說'=='和'=在'[[]]內''是模式匹配運算符。 –

+0

@glenn:你確定嗎?這會破壞與POSIX的兼容性,並且'bash'應該是POSIX兼容的。 '=〜'和'!〜'是模式匹配運算符(並且相對較新)。 – geekosaur

+0

我閱讀手冊頁的方式是'正則表達式*匹配運算符,'=='和'!='是* glob *(和extglob)匹配運算符。請參閱[bash手冊](http://www.gnu.org/software/bash/manual/bashref.html#Conditional-Constructs)中的[[...]]討論 –

0

你可以例如使用bash=~運營商,如:

if [[ $string =~ "@" ]] ; then 
    # do something 
else 
    echo You have entered an invalid e-mail address! 
    exit 1 
fi 
3

如果你只是尋找的東西快速和骯髒的,這個慶典的條件表達式匹配的東西,有至少一個字符,一個‘@’,至少一字符,點和至少一個字符。

[[ "$email" == ?*@?*.?* ]] 

例子

$ [[ "[email protected]" == ?*@?*.?* ]] && echo Y || echo n 
Y 
$ [[ "[email protected]" == ?*@?*.?* ]] && echo Y || echo n 
n 

實際電子郵件驗證是粗糙的(見here

+0

感謝您的回答。我實際上有這個正則表達式需要的東西:if [[「$ ADDRESS」=〜「^ [A-Za-z0-9 ._%+ - ] + @ [A-Za-z0-9 .-] + \ 。[A-Za-z] {2,4} $「]] – titzmgee

0

您可以在bash中使用通配符式樣的圖案if條件語句:

if [[ $string != *"@"* ]] ; then 
    echo You have entered an invalid e-mail address! 
    exit 1 
else 
    # do something 
fi 

我d更進一步,並且每邊至少需要一個角色的@

if [[ $string != *?"@"?* ]] ; then 
    echo You have entered an invalid e-mail address! 
    exit 1 
else 
    : # do something 
fi 
相關問題