2013-08-12 19 views
14

Vorrei avere l'equivoco di quanto segue in una riga se la condizione/else.Una riga if/else condition nello script di shell linux

$maxline=`cat journald.conf | grep "#SystemMaxUse="` 
if [ $maxline == "#SystemMaxUse=" ] 
then 
    sed 's/\#SystemMaxUse=/SystemMaxUse=50M/g' journald.conf > journald.conf2 
    mv journald.conf2 journald.conf; 
else 
    echo "This file has been edited. You'll need to do it manually." 
fi 

Sto tentando di inserirlo in un comando a una riga. Finora ho ottenuto tutto tranne la parte del comando. Ecco cosa ho finora ...

maxline=`cat journald.conf | grep "#SystemMaxUse="` && if [ $maxline == "#SystemMaxUse=" ]; then sed 's/\#SystemMaxUse=/SystemMaxUse=50M/g' journald.conf > journald.conf2 && mv journald.conf2 journald.conf; fi 

Quindi, come posso includere la parte else del codice sopra nel mio comando? Grazie in anticipo per il tuo aiuto.

+2

Perché si vuole fare una cosa del genere, fa solo il codice illeggibile ... – erlc

+0

sto cercando per dare a qualcuno un comando per modificare il loro file di registro, ma cercando di renderlo un c & p cosa possono semplicemente eseguire nel loro terminale senza dover dilettarsi con la creazione di file e il loro uso. –

risposta

17

Sembra che tu fossi sulla buona strada. Devi solo aggiungere la dichiarazione else dopo ";" seguendo la dichiarazione "allora". Inoltre avrei diviso la prima riga dalla seconda riga con un punto e virgola invece di unirla con "& &".

maxline='cat journald.conf | grep "#SystemMaxUse="'; if [ $maxline == "#SystemMaxUse=" ]; then sed 's/\#SystemMaxUse=/SystemMaxUse=50M/g' journald.conf > journald.conf2 && mv journald.conf2 journald.conf; else echo "This file has been edited. You'll need to do it manually."; fi 

anche nello script originale, quando si dichiara maxline si è utilizzato back-tick "`" invece di singoli apici "'" che potrebbero causare problemi.

+0

Questo comando ha funzionato magnificamente! Sembra che && invece del punto e virgola sia stato ciò che stava causando il problema. –

+0

Ottimo! felice che avremmo potuto farlo funzionare. – Bryan

3

Non è una risposta diretta alla domanda, ma si potrebbe utilizzare l'OR-operatore

(grep "#SystemMaxUse=" journald.conf > /dev/null && sed -i 's/\#SystemMaxUse=/SystemMaxUse=50M/g' journald.conf) || echo "This file has been edited. You'll need to do it manually." 
Problemi correlati