执行bash脚本时出错

执行bash脚本时出错,bash,Bash,我有一个名为1.txt的文件,其中包含数字,如2、30、20、1等。我试图将此文本文件中的每个数字与数值20进行比较,如果该值等于20,我希望运行一个命令,否则退出 我的代码如下。当我尝试运行bash脚本时,错误如下 ---------- email.sh: line 2: [[2: command not found email.sh: line 2: [[1: command not found 您的if语法错误。尝试包括空间: #!/bin/bash for f in $( cat 1

我有一个名为
1.txt
的文件,其中包含数字,如
2、30、20、1等。
我试图将此文本文件中的每个数字与数值
20
进行比较,如果该值等于
20
,我希望运行一个命令,否则退出

我的代码如下。当我尝试运行bash脚本时,错误如下

----------
email.sh: line 2: [[2: command not found
email.sh: line 2: [[1: command not found


您的if语法错误。尝试包括空间:

#!/bin/bash
for f in $( cat 1.txt ); do

if [ $f -eq "20" ];

then

echo "sucess"

fi

done

您的if语法错误。尝试包括空间:

#!/bin/bash
for f in $( cat 1.txt ); do

if [ $f -eq "20" ];

then

echo "sucess"

fi

done

在if中的
[[
后面应该有空格

 if [[ "$f" -eq "20" ]];
示例

$ if [[ "$f" -eq "20" ]];    then       echo "sucess";    fi
sucess
为什么?


在bash中调用
[[]]
构造,并且您始终需要用空格分隔任何语言中的标记。

在if中的
[[[
之后应该有空格

 if [[ "$f" -eq "20" ]];
示例

$ if [[ "$f" -eq "20" ]];    then       echo "sucess";    fi
sucess
为什么?



在bash中,调用
[[]]
构造,并且您总是需要用空格分隔任何语言中的标记。

尝试在变量和方括号之间使用空格,例如
[[$f-eq“20”];
尝试在变量和方括号之间使用空格,例如
[$f-eq“20”];
]
不是命令,两者都是关键字。您可以将其统称为测试命令:
[[]]是扩展的测试命令
@Jahid对不起,但我想我在bash中写了同样的[[]]是扩展的测试命令,
部分是
而command
s
是错误的。你把它们分别归为命令,这在语法上是错误的,即它们都不是命令,它们一起意味着一个命令。@Jahid明白了,我已经重新格式化了句子。希望现在可以了。
]
不是命令,它们都是关键词。您可以将其统称为测试命令:
[[]]是扩展测试命令
@Jahid抱歉,但我想我在bash中也写了同样的命令[[]]是扩展测试命令,部分
和命令
s
是错误的。你把它们分别归为命令,这在语法上是错误的,即它们都不是命令,它们一起意味着一个命令。@Jahid明白了,我重新格式化了句子。希望现在一切正常。引用您的变量,在大多数情况下在
[]
中使用未引用的变量是危险的。还有一个问题,您不应该使用字符串与
-eq
进行比较,这是用于整数的。如果[“$f”=“20”],则使用
instead@Jahid回答的另一个人也做了同样的事情,她也纠正了他?
[]
[[]]]
不同,
[[[]]
是一个扩展版本,可以解决你的所有问题。引用你的变量,在
[]中使用未引用的变量是危险的
在大多数情况下。还有一个问题,您不应该将字符串比较用于
-eq
,它用于整数。如果[“$f”=“20”],则使用
instead@Jahid回答的另一个人也做了同样的事情,她也纠正了他?
[[]]
[[[]]]
不同,
[[[]]
是一个扩展版本,可以解决您的所有怪癖。