算术二元运算符 -gt, -lt 给出错误但在 shell 脚本中工作

Sou*_*rav 2 command-line scripts

我写了这个简单的脚本,它也能工作,但显示错误

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
Run Code Online (Sandbox Code Playgroud)

输出

Enter 1st number
5
Enter 2nd number
10
MUlti is 50
./script.sh: line 7: [5: command not found
10 is bigger than 5
Run Code Online (Sandbox Code Playgroud)

enz*_*tib 9

[是一个内置命令,也称为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
Run Code Online (Sandbox Code Playgroud)

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


Jus*_*usk 5

对于 bash 条件 if 语句,您需要在条件前后都有一个空格。你的应该是这样的:

if [ $n1 -lt $n2 ]
Run Code Online (Sandbox Code Playgroud)

代替

if [$n1 -lt $n2]
Run Code Online (Sandbox Code Playgroud)

高飞,但那是 bash shell。