2016-08-09 5 views
2

в приведенном ниже коде я пытаюсь найти файлы. здесь, я хотел исключить файлы, которые начинаются с '#'передать аргумент в выражении if

Пожалуйста, помогите мне в этом.

#!/bin/bash 
while read -r name 
    do 
     if [[ $name!= "#" ]] 
     then 
      find ./2016* -name *files.txt 
     fi 
done < file.txt 

становится ниже ошибки:

conditional binary operator expected 
syntax error near `"#"' 
      if [[ $name!= "#" ]] 
+5

'$ имя = "#"' (пробелы важны) –

+1

Для таких ошибок, склеивание! код в http://www.shellcheck.net/ всегда полезен. – fedorqui

+1

Также даже с пространством вы делаете буквальное совпадение. – 123

ответ

1

пространства и двойные цитаты важны. Держите пространство между $name и != и вставить двойные котировки для ./2016* и *files.txt

#!/bin/bash 

while read -r name 
do 
    if [[ $name != "#" ]] 
    then 
     find "./2016*" -name "*files.txt" 
    fi 
done < file.txt 
+0

Благодарю вас всех ... только один вопрос, как поиск можно рассматривать как символ «#» - это начало файла? Я должен назвать значение переменной, которая определена .. ex: 'variable =" # "' 'if [[$ name! =" $ Variable "]]' – user180946

3
  1. Добавить пространство между $name и !=

  2. Вы должны исключить строки, которые начинаются с #. Не только линии, которые имеют только #. Для этого изменения шаблон равен "#*"

  3. Используйте переменную name в команде find.

#!/bin/bash

while read -r name 
    do 
     if [[ $name != "#*" ]] 
     then 
      find ./2016* -name "$name" 
     fi 
done < file.txt 

Лучший способ исключить строки комментария упоминается здесь - bash loop skip commented lines

+0

спасибо. Мне также нужен еще один аргумент в выражении if, например ниже 'if [[$ name! =" # * "&& $ name ==" * old * "]]' , но это не сработало. , пожалуйста, помогите мне. – user180946