我写了这个简单的脚本它也可以运行但是显示错误
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。