2017-04-22 80 views
1

我正在嘗試一些簡單的bash腳本,我正在研究一個簡單的比較腳本,程序在其中讀取一個字符char,如果它是「Y」或「y」,它會打印「是「,如果是」N「或」n「,則爲」否「。字母Y,Y,N,n被認爲是唯一將被用作輸入的字母。Bash if else條件問題

#!/bin/sh 

read char 
if (($char = "Y")) || (($char = "y")) 
then 
    echo "YES" 
else 
    echo "NO" 
fi 

上述腳本y或工作,但是當我試圖把N或N,它仍然打印「是」,我試圖找出我做錯了。我知道這與括號有關,因爲當我使用帶括號的語法時,像這樣

if [ "$char" == "Y" ] || [ "$char" == "y" ] 

它工作得很好。 我已經嘗試了所有組合的括號,如

if (("$char" = "Y")) || (("$char" = "y")) 

if (($char == "Y")) || (($char == "y")) 

if (("$char" == "Y")) || (("$char" == "y")) 

if (("$char" == "Y" || "$char" == "y")) 

但他們沒有工作。 你能告訴我我犯的錯誤是什麼?

+3

'sh'不'bash' – Cyrus

+0

你是對的。我應該在原始文章中更改它嗎? – Ioannis

回答

5

((...))用於算術只有;你正在執行字符串比較。改爲使用[[。您可以使用模式匹配來同時檢查大寫或小寫。

if [[ $char = [Yy] ]]; then 

如果你真的想用/bin/sh便攜性,然後使用兩個[命令:

if [ "$char" = Y ] || [ "$char" = y ]; then