2015-12-12 62 views
0

嘗試從文件列表中測試文件大小是否爲零回顯關於該文件的消息,或者對包含某些內容的文件執行其他幾項操作。爲什麼在這個Bash腳本的「if」中沒有任何操作,而在「then」中沒有任何操作?

我的文件列表只包含一個零字節的文件。然而,在找到該文件後,每個文件都會按照它們全部具有零字節的方式進行操作。去你的意見

for f in $(cat suffixes.txt) 
    do 
     if [ ! -s "$f" ] ; 
     then 
      echo *.$f exists with size zero bytes 
     else 
      echo "+++++++++++++++++++++++++" 
      echo for file *.f$ 
      echo number of lines equals 
      cat *.$f | wc -l 
      echo occurences of \"trade\" in file equals 
      grep -o trade *.$f | wc -l 
      echo "+++++++++++++++++++++++++" 
     fi 
    done 
+1

[不要用'for for'讀取行](http://mywiki.wooledge.org/DontReadLinesWithFor)。 –

+0

難道你不是指'如果[-e「$ f」] && [! -s「$ f」]'?如果你不測試'-e',你不知道'!' -s'告訴你。 –

+0

此外,您正在測試一個名爲'「$ F」',而不是他的名字*結束在*文件'* .f'文件與測試。 –

回答

1

,則需要兩個循環:

for s in $(cat suffixes.txt); 
    do for f in *.$s; 
do 
    [[ $f == "*.$s" ]] && break; # File with this suffix non-existent 
    if [ ! -s "$f" ] ; 
    then 
    echo $f exists with size zero bytes 
    else 
    echo "+++++++++++++++++++++++++" 
    echo for file $f 
    echo number of lines equals 
    cat $f | wc -l 
    echo occurences of \"trade\" in file equals 
    grep -o trade $f | wc -l 
    echo "+++++++++++++++++++++++++" 
    fi 
    done 
done 

第一次會議這種類型的代碼標籤,希望它看起來確定。

+0

'對於x $中(貓...)'是壞的形式。請參閱http://mywiki.wooledge.org/DontReadLinesWithFor –

+0

此外,編寫'[[-e「$ f」]] ||更傳統。這樣你就不需要在你的代碼中嵌入glob兩個地方,並且如果需求改變的話,不得不擔心在更多的地方更新它。 –

+0

實際上想知道字符串比較和文件存在測試之間的權衡。 – bogomips

相關問題