2014-11-04 61 views
1

我從bash腳本開始,實現大部分我在其他編程語言中學習過的東西。我必須檢查用戶是否輸入了元音字符。我想出了這個:檢查輸入是否是一個元音

#!/bin/bash 
read -p "Enter something: " char 
if [[ $char -eq [AEIOUaeiou]* ]]; then 
    echo "vowel" 
else 
    echo "consonant" 
fi 

,但是當我在IdeOne運行它,我得到的錯誤:

prog.sh: line 3: [[: [AEIOUaeiou]*: syntax error: operand expected (error token is "[AEIOUaeiou]*") 

有人能告訴我這裏有什麼問題和如何去糾正呢?

我知道另一個不太乾淨的方法是將多個條件||一起編輯。我試圖避免這種情況。

+0

anubhava給你正確的答案。你也可以小寫變量的比較:'[[$ {char ,,} == * [aeiou] *]]' – 2014-11-04 16:18:20

+0

@glennjackman我正在查找它。什麼是'$ {char ,,}'調用? – 2014-11-04 16:20:20

+0

您可以在手冊頁的[參數擴展]部分(https://www.gnu.org/software/bash/manual/bashref.html#Shell-Parameter-Expansion)中找到它。 – 2014-11-04 16:22:49

回答

4

您需要使用==運營商這個水珠匹配:

#!/bin/bash 
read -p "Enter something: " char 
if [[ "$char" == *[AEIOUaeiou]* ]]; then 
    echo "vowel" 
else 
    echo "consonant" 
fi 

-eq - 用於匹配的號碼

man test

INTEGER1 -eq INTEGER2 
      INTEGER1 is equal to INTEGER2 
+0

在兩邊添加'*'是指任何有元音的字符串?我吸取正則表達式:D – 2014-11-04 16:00:24

+1

'-eq'是一個數字操作,它不適用於字符串(不能解釋爲數字)。 – yerforkferchips 2014-11-04 16:01:27

+1

我正在更新它。 '-eq'用於比較數字。是的,任何一方的'* *只是檢查任何地方的元音的存在。 – anubhava 2014-11-04 16:01:28