我正在编写Shell程序以比较两个数字并使用测试命令显示状态
#!/bin/sh
a="42"
b="23"
echo $a
test [$a -eq $b]
echo $?
但是我遇到这样的错误 eq:第5行:test:[42:预期的整数表达式2
答案 0 :(得分:2)
您必须更改行
test [$a -eq $b]
到
test $a -eq $b
test需要一个整数表达式,并且[$ a -eq $ b]不是整数表达式
答案 1 :(得分:0)
松开方括号。来自
test [$a -eq $b]
行应位于
test $a -eq $b
答案 2 :(得分:0)
使用以下简化的答案
#!/bin/sh
a=42
b=23
echo $a
test $a -eq $b
echo $?
由于 a 不等于 b,因此它将答案打印为 1
答案 3 :(得分:0)
请移除方括号。
在手册页上,使用方括号替代显式使用“ test”一词。所以是另一个。
在man页上:
test Evaluate a conditional expression expr. Syntax
test expr
[ expr ]
[[ expr ]] [ is a synonym for test but requires a final argument of ].
答案 4 :(得分:0)
尝试man test
,在手册页中,您会看到它期望您在test
之后表达。您的表达式为$a -eq $b
,命令应为test $a -eq $b
您做错了什么:
man [
,您将被引导到与man test
相同的手册页。您正在尝试同时使用两者[
本身是命令,因此在命令的下一部分之前,[
后需要一个空格。因此,它应该是[ $a -eq $b ]
而不是[$a -eq $b]
在使用test [$a -eq $b]
的行中,您可以使用
test $a -eq $b
或[ $a -eq $b ]
答案 5 :(得分:0)
您必须使用一个,因为它们是相同的(无论某些内置的shell)
$ ls -l /bin/{test,[}
-rwxr-xr-x 1 root wheel 22704 4 May 00:05 /bin/[
-rwxr-xr-x 1 root wheel 22704 4 May 00:05 /bin/test
所以
test expr
或
[ expr ]
甚至
/bin/[ expr ]