2016-12-13 38 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]}"