我试图提示用户猜测0-9之间的值。我得到预期的错误整数表达式。我不明白为什么有人能解释我哪里出错了?
num=8
echo "Enter a value between 0-9"
read -a guess
if [ ${guess[0]} -eq num ] ; then
echo "You guesses the right number"
elif [ ${guess[0]} -gt num ] ; then
echo "You guessed too high"
elif [ ${guess[0]} -lt num ] ; then
echo "You guess too low"
fi
答案 0 :(得分:2)
仅进行此代码正常运行所需的最小更改次数:
#!/bin/sh
num=8
echo "Enter a value between 0-9"
read guess
if [ "$guess" -eq "$num" ] ; then
echo "You guesses the right number"
elif [ "$guess" -gt "$num" ] ; then
echo "You guessed too high"
elif [ "$guess" -lt "$num" ] ; then
echo "You guess too low"
fi
注意:
-a
参数取出read
;这样做也使您的代码与POSIX sh兼容,因此在所有符合POSIX标准的shell系统上都使用#!/bin/sh
。test
(或[
)时,您需要扩展变量。 $num
,而不是$num
;后者只能在数值上下文中使用,而test
与解析器一样是常规命令 - 它不会在语法级别创建任何特殊上下文。[
是常规命令,所以在它之后需要空格,就像任何其他命令名一样。[
是常规命令,所以在它期望作为最后一个参数的]
之前需要空格 - 与将参数传递给其他任何参数时相同。#!/bin/bash
开头),你可以使用数学上下文:if (( guess == num ))
或if (( guess > num ))
。这个 是一个数学上下文,并且有特殊的解析规则。