我正在编写一个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”。如果我在==的任一侧添加空格,那么无论输入如何都会返回“错误”!我尝试了各种各样的东西,但无法理解为什么
答案 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]}"