2012-02-24 7 views
9

problem jest z tym kodem:Shell skrypt z wc -l, jeżeli oświadczenie nie pracuje

words=`wc -l /home/tmp/logged.log | awk '{print $1}'`; 
    if [ $words == 26 ] 
    then 
    echo $words 
    echo Good 
    else 
    echo Not so good 
    fi 

zawsze zwraca oświadczenie innego. Nawet tho wynik jest 26. Próbowałem też

 words=`wc -l < /home/jonathan/tmp/logged.log`; 
+0

Mój zakład jest to, że '$ words' ma kończącego znaku nowej linii' "26 \ n" '. –

+0

Aby nie dopuścić do "wc" drukowania nazwy pliku, należy ją odczytać ze stdin: 'words = $ (wc -l

Odpowiedz

6

spróbuje użyć [ $words -eq 26 ] zamiast [ $words == 26 ]

lub [ 26 == 26 ] aby sprawdzić, czy działa prawidłowo oświadczenie

+0

Dzięki za pomoc, sam znalazłem problem sam po próbie 26 == 26. Problemem był ten ostatni blog | grep Nigdy | wc -l> /tmp/logged.log. Plik logu zawierał 1 wiersz o wartości 26. – user1204032

+0

cieszę się! jednak możesz użyć niektórych operatorów typu C w bashu, używając takiego wyrażenia [[26 == 26]] – triclosan

2

== Bo nie jest ważne. Użyj =

if [ $words = 26 ] 

Przy okazji można użyć cut zamiast awk.

wc -l /home/tmp/logged.log | cut -f1 -d" " 
+0

Jego drugi przykład, wc -l jordanm

+0

Dzięki za pomoc, sam znalazłem problem po wypróbowaniu 26 == 26. Problemem był ten ostatni blog | grep Nigdy | wc -l> /tmp/logged.log. Plik logu zawierał 1 wiersz o wartości 26. – user1204032

1

Spróbuj tego:

words=`wc -l /home/tmp/logged.log | awk '{print $1}'`; 
if test $words -eq 26; then 
    echo $words 
    echo Good 
else 
    echo Not so good 
fi