Shell脚本“测试”命令

时间:2019-06-20 05:22:52

标签: linux shell

我正在编写Shell程序以比较两个数字并使用测试命令显示状态

#!/bin/sh
a="42"
b="23"
echo $a
test [$a -eq $b]
echo $?

但是我遇到这样的错误  eq:第5行:test:[42:预期的整数表达式2

6 个答案:

答案 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

您做错了什么:

  1. 使用方括号与测试相同。尝试使用man [,您将被引导到与man test相同的手册页。您正在尝试同时使用两者
  2. 由于[本身是命令,因此在命令的下一部分之前,[后需要一个空格。因此,它应该是[ $a -eq $b ]而不是[$a -eq $b]

在使用test [$a -eq $b]的行中,您可以使用

  1. test $a -eq $b
  2. [ $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 ]