2016-01-28 155 views
1

我有一个名为1.txt的文件,其中包含数字,如2, 30,20,1 etc.我试图将此文本文件中的每个数字与数字值20进行比较,如果该值等于20,否则退出。执行bash脚本时出错

我的代码如下。当我尝试为

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

for f in $(cat 1.txt); do 
    if [[$f -eq "20"]]; 
    then 
     echo "sucess" 
    fi 
done 
+1

尝试在变量和方括号之间使用空格,如'[[$ f -eq“20”]];' – dmi3y

回答

-1

运行bash脚本,收到错误。在你如果语法错误的错误。尝试包括空间:

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

if [ $f -eq "20" ]; 

then 

echo "sucess" 

fi 

done 
+0

引用您的变量,在大多数情况下在'[]'中使用非引号变量是危险的。 – Jahid

+0

我不明白 – Douglas

+0

请阅读:http://www.gnu.org/software/bash/manual/bash.html#Quoting – Jahid

1

你应该在[[后有空间,如果

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

$ if [[ "$f" -eq "20" ]]; then  echo "sucess"; fi 
sucess 

为什么?

在bash中,[[ ]]的构造叫做extended test command,你总是需要用任何带空格的语言来分隔标记。

+0

']]'不是命令,它们都是关键字。在一起,你可以称之为测试命令:'[[]]是扩展测试命令' – Jahid

+0

@Jahid对不起,但我想我写了相同的_in bash [[]]是扩展测试命令,_ – nu11p01n73R

+0

部分' are'和command's'是错误的。您将它们分别归为命令,这在语法上是错误的,即它们都不是命令,它们在一起意味着一个命令。 – Jahid