2014-07-04 38 views
0

我知道這裏一定是被覆蓋的......但我是一個新的正則表達式。在if-else中使用正則表達式

我想在if-else語句 中使用正則表達式,但沒有得到正確的值。

我想輸入的字符串匹配一個正則表達式[a-z][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9]

這裏是代碼:

#!/bin/bash 

echo "Please Enter the string starting with an 'ALPHABET' and the other characters can be 'ALPHA NUMERIC'" 
read str 

if ("$str" == '[a-z][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9]'); 
then 
echo "Correct" 
else 
echo "Incorrect" 
fi 

任何值我給我得到不正確的......

+0

你用什麼外殼?這可能不是'bash'語法... –

回答

1

我嚴重懷疑這是有效的bash語法。

首先,bash使用=~運算符。

但這並不能完全解決您的問題。 bash中的if子句放置在方括號內bash對空格也非常敏感。一個工作程序將是:

#!/bin/bash 

echo "Please Enter the string starting with an 'ALPHABET' and the other characters can be 'ALPHA NUMERIC'" 
read str 

if [[ $str =~ ^[a-z][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9]$ ]]; 
then 
    echo "Correct"; 
else 
    echo "Incorrect"; 
fi 

請注意,正則表達式不是一個字符串。此外,代碼修改了正則表達式中的^,最後修改了$。這迫使bash匹配整個字符串


關於您的正則表達式:它與您的程序中的描述不匹配。您要求輸入一個以[A-Za-z]開頭的字符串,然後選擇一個或多個字母字符。一個正確的正則表達式是:

[A-Za-z][A-Za-z0-9]* 

星號表示零,一個或多個重複的最後一個字符。

+0

感謝解釋...我是新來的腳本 你的絕招工作... 其做工精細現在 #!/斌/慶典 回聲「請輸入如果[[$ str =〜^ [Az] [A-z0-9] {2,7} $]]字符串以'ALPHABET'開頭,其他字符可以'ALPHA NUMERIC'' 讀取str then echo「Correct」 else echo「Incorrect」 fi – Pankaj

2

要匹配規則在bash中的表達式,您需要使用=~運算符。

if [[ $str =~ ^[a-z][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9][a-z0-9]$ ]]; 
then 
    echo "Correct"; 
else 
    echo "Incorrect"; 
fi