2016-12-13 87 views
0

我正在編寫一個shell腳本,在命令行中輸入一個介於1和7之間的數字,並返回相應的星期幾。我的代碼目前如下所示:bash - elif語句返回相同的值,不管輸入如何

#!/bin/bash 
echo "Please enter a number between 1 and 7 >" 
read number 
number=$n 
if [ "$n"=="1" ] 
then 
echo "Monday" 
elif [ "$n"=="2" ] 
then 
echo "Tuesday" 
elif [ "$n"=="3" ] 
then 
echo "Wednesday" 
elif [ "$n"=="4" ] 
then 
echo "Thursday" 
elif [ "$n"=="5" ] 
then 
echo "Friday" 
elif [ "$n"=="6" ] 
then 
echo "Saturday" 
elif [ "$n"=="7" ] 
then 
echo "Sunday" 
else 
echo "error" 
fi 

無論輸入如何,都會返回「星期一」。如果我在==兩端添加空格,則無論輸入如何,它都會返回「錯誤」!我已經嘗試了各種東西,但不能工作了,爲什麼

+1

請看看:http://www.shellcheck.net/ – Cyrus

+0

你的awk代碼肯定是錯誤的:你在'number'變量的值,而是那麼你在比較中使用另一個變量(變量'n')。變量'n'似乎是未定義的。 – Jdamian

+0

@Cyrus它告訴我問題在第4行'number = $ n'。我認爲它正在讀取的數值,也就是數字'沒有被賦予'$ n',但我不明白爲什麼 – pxdr0

回答

3

這些

read number 
n="$number" 

更新1替換代碼的以下行

read number 
number=$n 

:bash的格式[ "$n"=="x" ]比較總是返回代碼0(true),無論是x值,因爲測試[ string ]檢查string是否爲NULL o不是。換句話說,因爲沒有空白時,第一if一句代碼始終是true,不管可變n的和"x"

+0

中描述的相同,那麼我是否使用'$ n'來比較?例如'if [「$ n」==「1」]' – pxdr0

+0

在bash上,對於整數比較來說,如果[[$ n「-eq 1]''這個更準確。請注意所有元素之間的空間。 –

+0

@JamilSaid之前確實有空格,併產生了不同的錯誤。無論如何,添加改變了這一切,現在一切正常。謝謝! – pxdr0

2

值的值,我看到了同樣的事情Jdamian但它似乎是不夠的所以,因爲你正在使用數字它可以prefable使用-eq而不是像這樣:

if [ $n -eq 1 ]; then echo "Monday"; elif [ $n -eq 2 ]; then echo "Tuesday"; elif [ $n -eq 3 ]; then echo "Wednesday"; elif [ $n -eq 4 ]; then echo "Thursday"; elif [ $n -eq 5 ]; then echo "Friday"; elif [ $n -eq 6 ]; then echo "Saturday"; elif [ $n -eq 7 ]; then echo "Sunday"; else echo "error"; fi 

您可以替換;通過一個新的行,如果你不喜歡在不同的音符一個襯墊格式

,如果一個大型的混亂,如果這樣是沒有必要的,我會建議使用的情況下,而不是一個更好的可讀性:

case $n in 
    1) echo "Monday" ;; 
    2) echo "Tuesday" ;; 
    3) echo "Wednesday" ;; 
    4) echo "Thursday" ;; 
    5) echo "Friday" ;; 
    6) echo "Saturday" ;; 
    7) echo "Sunday" ;; 
    *) echo "error" ;; 
esac 
+0

感謝您的支持。我迄今爲止所介紹的案例陳述的例子並沒有表明他們做得如此清楚,所以我沒有真正將其視爲一種選擇。一般來說,我更喜歡讓事情儘可能簡潔明瞭! – pxdr0

+0

但是這個工作,你需要Jdamian答案和數量的值分配到n,而不是周圍的其他方法,因爲這樣你寫的,你分配的讀取數的值,那麼你通過分配重新編號的$ N值,它是一個未聲明的變量置零數的值 – Mike

1

陣列可以更簡單:

#!/bin/bash 
day=(Monday Tuesday Wednesday Thursday Friday Saturday Sunday) 

read -p "Please enter a number between 1 and 7 >" n 
echo "${day[n-1]}"