算术二元运算符 -gt、-lt 会产生错误,但在 shell 脚本中可以正常工作

算术二元运算符 -gt、-lt 会产生错误,但在 shell 脚本中可以正常工作

我写了这个简单的脚本它也可以运行但是显示错误

clear
echo Enter 1st number
read n1
echo Enter 2nd number
read n2
echo MUlti is `expr $n1 \* $n2`;
if [$n1 -lt $n2]
then
 echo $n1 'is bigger than' $n2
else
 echo $n2 'is bigger than' $n1
fi

输出

Enter 1st number
5
Enter 2nd number
10
MUlti is 50
./script.sh: line 7: [5: command not found
10 is bigger than 5

答案1

[一个内置命令,也称为test,和所有命令一样,至少需要一个空格将其与命令中的其他单词分隔开。也可作为或[中的常规命令使用。/usr/bin/[/usr/bin/test

当作为 调用时, final 的存在]是命令的一个要求,[并且它周围的空格是命令的每个参数所必需的。

也就是说,在 bash 中你应该使用命令[[,它比 有一些优势[,比如除了和 之外还支持&&||进行逻辑运算。-a-o

此外,要进行整数算术运算和整数之间的比较,最好使用算术扩展$((math operations))和相应的命令((math ops))

通过这些观察,你的脚本可能是:

#!/bin/bash

clear
echo "Enter 1st number"
read n1
echo "Enter 2nd number"
read n2
echo "Multi is $((n1 * n2))"
if ((n1 > n2)); then
  echo "$n1 is bigger than $n2"
else
  echo "$n2 is bigger than $n1"
fi

记住使其可执行(chmod +x my-script),然后使用 执行它./my-script

答案2

对于 bash 条件 if 语句,您需要在条件之前和之后留一个空格。您的代码应如下所示:

if [ $n1 -lt $n2 ]

代替

if [$n1 -lt $n2]

很傻,但这就是 bash shell。

相关内容