无论输入

时间:2016-12-13 18:59:56

标签: bash shell if-statement terminal

我正在编写一个shell脚本,在命令行中输入1到7之间的数字,并返回一周中的相应日期。我的代码目前看起来像这样:

#!/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

无论输入如何,都会返回“Monday”。如果我在==的任一侧添加空格,那么无论输入如何都会返回“错误”!我尝试了各种各样的东西,但无法理解为什么

3 个答案:

答案 0 :(得分:3)

替换代码的以下行

read number
number=$n

与这些

read number
n="$number"

更新1 :格式[ "$n"=="x" ]的bash比较始终返回代码0(true),无论x值是否因为测试{ {1}}检查[ string ]是否为NULL。换句话说,由于没有使用空格,代码的第一个string句子始终为if,无论变量true的值和n <的值如何/ p>

答案 1 :(得分:2)

我看到了与Jdamian相同的东西,但它看起来不够,所以因为你正在使用数字,所以可以使用-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

答案 2 :(得分: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]}"