2016-01-28 6 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

Существует ошибка в вашем случае, если ошибка синтаксиса. попробуйте в том числе пространство:

#!/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

']]' is no command, оба из них являются ключевыми словами. Вместе вы можете назвать это тестовой командой: '[[]] является расширенной тестовой командой – Jahid

+0

@Jahid Извините, но я думаю, что я написал то же самое _In bash [[]] - это расширенные тестовые команды, _ – nu11p01n73R

+0

часть' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''. Вы приписываете их отдельно как команды, это синтаксически неправильно, то есть оба они не являются командами, вместе они подразумевают одну команду. – Jahid

Смежные вопросы