2012-02-24 9 views
9

Il problema è con questo codice:script di shell con -l wc, if non funziona

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

ritorna sempre l'istruzione else. Comunque Anche il risultato è 26. Ho anche provato

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

mia scommessa è che '$ words' ha una nuova riga che termina' "26 \ n" '. –

+0

Per evitare che 'wc' stampi il nome del file, fallo leggere da stdin:' words = $ (wc -l

risposta

6

tenta di utilizzare [ $words -eq 26 ] invece di [ $words == 26 ]

o [ 26 == 26 ] per controllare che istruzione funziona correttamente

+0

Grazie per l'aiuto, ho trovato il problema da solo dopo aver provato 26 == 26. Il problema era questo lastlog | grep Never | wc -l> /tmp/logged.log. Il file di registro conteneva 1 riga con valore 26. – user1204032

+0

felice! tuttavia è possibile utilizzare alcuni degli operatori di tipo C in bash utilizzando tale espressione [[26 == 26]] – triclosan

2

Perché == non è valido. Utilizzare =

if [ $words = 26 ] 

Tra l'altro è possibile utilizzare al posto di cutawk.

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

Il suo secondo esempio, wc -l jordanm

+0

Grazie per l'aiuto, ho trovato il problema da solo dopo aver provato 26 == 26. Il problema era questo lastlog | grep Never | wc -l> /tmp/logged.log. Il file di registro conteneva 1 riga con valore 26. – user1204032

1

Prova questo:

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 
Problemi correlati