2014-11-24 68 views
0

我保證這是一個新手的錯誤,但我似乎無法讓我的if-elif-else語句與比較字符串一起工作。在bash中的字符串比較

echo "What is your current OS?" 
read $OS 
if [ "$OS" == "Unix" ] 
then  
    echo "Unix is pretty good.." 
elif [ "$OS" == "Linux" ] 
then  
    echo "Open-source eh?" 
elif [ "$OS" == "Windows" ] 
then  
    echo "Microsoft owns the universe" 
elif [ "$OS" == "OSX" ] 
then  
    echo "Apple has control over you" 
else  
    echo "Not a valid os type." 
fi 
+2

首先使用'=',而不是'==',以符合POSIX標準。第二 - '讀取操作系統',而不是'讀取操作系統' – 2014-11-24 00:22:45

+0

其他答案可能看起來不像基於其標題的重複 - 但底層問題是相同的。 – 2014-11-24 00:29:46

回答

0

您正在閱讀$OS,這是OS變量的值。

您想要讀取OS,然後使用sigil來訪問它:$OS

0

要讀入變量OS,不進變量其名稱包含在變量OS,用途:

read OS 

read $OS 

通過方式 - 這個代碼將會更好tten與case聲明:

case $OS in 
    Unix) echo "Unix is pretty good.." ;; 
    Linux) echo "Open-source eh?" ;; 
    Windows) echo "Microsoft owns the universe" ;; 
    OSX) echo "Apple has control over you" ;; 
    *) echo "Not a valid os type." ;; 
esac 

相反,如果你要使用test(又名[),使用=(這是符合POSIX標準),而不是==(這是一個bash擴展)爲字符串相等。

0
if [ "$#" != 1 ] 
then 
    echo $0 OS 
    exit 
fi 
case "$1" in 
Unix) echo 'Unix is pretty good..'  ;; 
Linux) echo 'Open-source eh?'    ;; 
Windows) echo 'Microsoft owns the universe' ;; 
OSX)  echo 'Apple has control over you' ;; 
*)  echo 'Not a valid os type.'  ;; 
esac 
+0

使用命令行參數而不是從標準輸入讀取是一個非常大的行爲變化,無需評論。 – 2014-11-24 00:27:05