Shell 脚本

Shell 脚本
#!/bin/bash
echo "Int. a number"
read num1
echo "Int. another numer"
read num2
if ["$num1"="$num2"]; then
echo "Equals"
else
echo "Dif"
fi
if["$num1"<0]; then
echo "The number $num1 is negative"
else if ["$num2"<0]; then
echo "The number $num2 is negative"
fi
#

该代码不起作用,当我看到数字小于 0 时,我发现了一些错误。

谢谢

答案1

[语法错误。请阅读有关命令 ( help [/ help test)的文档

每个参数必须是其自身的参数,即,必须在 之间使用空格:[ "$num1" == "$num2" ]。第一次检查没有看到错误的原因是,它尝试查找名为 (num1=3 和 num2=4) 的命令[3==4],但该命令不存在,因此表达式的计算结果为 false。在第一次检查中,您编写了一个<,它是 shell 运算符输入重定向. 它尝试打开文件4],但大多数情况下该文件并不存在。

然而,当比较数字时,您应该使用-eq类似的,==用于字符串比较:[ 3 == 3.0 ]为假,[ 3 -eq 3.0 ]为真。

答案2

在 Bash 中,如果使用算术评估,您可以使用熟悉的运算符进行数字比较:

if ((num1 ==num2 ))

if ((num1<0))    # in this context, < is not evaluated as a redirection operator

else if (( $num2 < 0 ))

如您所见,我使用空格相当自由,如果需要,可以省略美元符号。不过您应该注意这一点:

a=    # set to nothing, thus null
if (( a == 0 )); then echo "ok"; fi    # echoes "ok" since a evaluates to 0
if (( $a == 0 )); then echo "ok"; fi    # produces an error even if $a is quoted

如果使用双方括号,则可以使用“<”和“>”代替“-lt”和“-gt”进行字符串比较。对空格的要求与对单方括号的要求相同。

s="b"
if [[ "$s" > "a" ]]
t=    # null
if [[ $t < "a" ]]    # evaluates to true

正如您在最后一个例子中看到的,当使用双方括号时,不需要用引号括起来变量以防止它们为空或未设置的可能性,这与使用单方括号不同。

答案3

您使用的运算符进行字符串比较。您应该使用 -eq 表示整数相等,使用 -lt 表示小于,等等(它们也应该用空格括起来)。

相关内容