为什么我的条件总是被评估为真?

为什么我的条件总是被评估为真?

我正在编写我的第一个 bash 脚本,但遇到了一个问题。下面是一个例子,我要求输入姓名、年龄,并显示一条消息,该消息会根据年龄是否小于或等于 35 岁而变化:

#!/bin/bash
ageLimit = 34
echo "What is your name?"
read userName
echo "How old are you?"
read userAge
if (( "$userAge" -le "$ageLimit" )); then
    echo "Hey, $userName.  At $userAge years old, you are young."
else
    echo "Gosh, $userName.  At $userAge years old, you're pretty old."
fi

无论我回答多少年龄,他们都说我很年轻。这是在 Raspbian 上运行的——希望这能有所帮助。谢谢!

杰里米

答案1

=空格在 whell 脚本中起着很大的作用,你需要注意它们。变量名和符号及其值之间没有空格。

重写你的 shell 脚本如下:

#!/bin/bash
ageLimit=34
echo "What is your name?"
read userName
echo "How old are you?"
read userAge
if [[ "$userAge" -le "$ageLimit" ]]; then
    echo "Hey, $userName.  At $userAge years old, you are young."
else
   echo "Gosh, $userName.  At $userAge years old, you're pretty old."
fi

在动手实践时,请参考有关 shell 脚本的优秀教程。谷歌搜索后,可以找到以下优秀教程:

你可能还想知道这一点:

答案2

我发现你的代码中有两个小错误。

[1] 声明变量时不要使用空格,请这样做

ageLimit=34

[2] 提出条件的方法有两种if,请随意使用。

if [ "$userAge" -le "$ageLimit" ]; then

或者

if (( "$userAge" <= "$ageLimit" )); then

答案3

如果您尝试评估两个字符串,则使用 -le -ge 如果您想评估数字,我建议您使用常规运算符 > <= 这是通用惯例并且很好。所以在这种情况下使用

如果 [ “$userAge” -le “$ageLimit” ]; 则否则 fi

相关内容