簡體   English   中英

Shell腳本“測試”命令

[英]shell scripting “test ” command

我正在編寫shell程序以比較兩個數字並使用test命令顯示狀態

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

但我遇到這樣的錯誤,如eq:第5行:test:[42:整數表達式應為2

你必須換線

test [$a -eq $b]

test $a -eq $b  

測試期望整數表達式,並且[$ a -eq $ b]不是整數表達式

松開方括號。

test [$a -eq $b]

行應該在哪里

test $a -eq $b

使用下面的簡化答案

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

由於a不等於b ,它將答案打印為1

請卸下方括號。

在手冊頁上,您可以使用方括號代替顯式使用“測試”一詞。 所以這是一個或另一個。

手冊頁:

test Evaluate a conditional expression expr. Syntax
      test expr
         [ expr ]
        [[ expr ]] [ is a synonym for test but requires a final argument of ].

嘗試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 ]

您必須使用一個,因為它們是相同的(不管某些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 ]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM