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間と !=スペースを追加 $name!= の間のスペースを維持し、 ./2016**files.txt

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

    ありがとうございました... ただ一つの質問ですが、検索はどのようにシンボル '#'として扱うことができるのですか? '=変数 "#"' ' 場合は[![$ NAME = "$変数"]]' – user180946

    3
    1. のための二重引用符を挿入します。ただ#を持つ行だけではありません。このためにパターンを変更するには"#*"

    2. コマンドで変数nameを使用します。

    #!/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 [[$ name!="#* "&& $ name ==" * old * "]]' のようにifステートメントにもう1つの引数が必要ですが、機能しません。 私を助けてください。 – user180946