Per riassumere le altre risposte, per uso generale:
if...then su più righe dichiarazione
if [ foo ]; then
a; b
elif [ bar ]; then
c; d
else
e; f
fi
Versione a riga singola
if [ foo ]; then a && b; elif [ bar ]; c && d; else e && f; fi
Utilizzo dell'operatore OR
( foo && a && b ) || ( bar && c && d ) || e && f;
Note
Ricorda che gli operatori AND e OR valutano se il codice risultato dell'operazione precedente è stato uguale a true/success (0
). Quindi, se una funzione personalizzata restituisce qualcos'altro (o niente del tutto), potresti riscontrare problemi con la scorciatoia AND/OR. In questi casi, potresti voler sostituire qualcosa come ( a && b )
con ( [ a == 'EXPECTEDRESULT' ] && b )
, ecc.
Nota anche che (
e [
sono tecnicamente comandi, quindi è necessario uno spazio bianco attorno a essi.
Invece di un gruppo di &&
istruzioni come then a && b; else
, potresti anche eseguire istruzioni in una subshell come then $( a; b ); else
, anche se questo è meno efficiente. Lo stesso vale per fare qualcosa come result1=$( foo; a; b ); result2=$( bar; c; d ); [ "$result1" -o "$result2" ]
invece di ( foo && a && b ) || ( bar && c && d )
. Anche se a quel punto ti occuperesti comunque di cose meno compatte e multilinea.
Sembra che tu fossi sulla strada giusta. Devi solo aggiungere l'istruzione else dopo il ";" dopo l'affermazione "allora". Inoltre dividerei 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 nel tuo script originale, quando dichiari maxline hai usato i back-tick "`" invece delle virgolette singole "'" che potrebbero causare problemi.
Non è una risposta diretta alla domanda, ma potresti semplicemente usare l'operatore OR
( 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."