Para resumir las otras respuestas, para uso general:
Multilínea si...entonces declaración
if [ foo ]; then
a; b
elif [ bar ]; then
c; d
else
e; f
fi
Versión de una sola línea
if [ foo ]; then a && b; elif [ bar ]; c && d; else e && f; fi
Uso del operador OR
( foo && a && b ) || ( bar && c && d ) || e && f;
Notas
Recuerde que los operadores AND y OR evalúan si el código de resultado de la operación anterior fue o no igual a verdadero/éxito (0
). Entonces, si una función personalizada devuelve algo más (o nada en absoluto), puede tener problemas con la abreviatura AND/OR. En tales casos, es posible que desee reemplazar algo como ( a && b )
con ( [ a == 'EXPECTEDRESULT' ] && b )
, etc.
También tenga en cuenta que (
y [
son comandos técnicamente, por lo que se requieren espacios en blanco alrededor de ellos.
En lugar de un grupo de &&
declaraciones como then a && b; else
, también podría ejecutar declaraciones en una subcapa como then $( a; b ); else
, aunque esto es menos eficiente. Lo mismo es cierto para hacer algo como result1=$( foo; a; b ); result2=$( bar; c; d ); [ "$result1" -o "$result2" ]
en lugar de ( foo && a && b ) || ( bar && c && d )
. Aunque en ese punto, de todos modos, te estarías metiendo más en cosas menos compactas y de varias líneas.
Parece como si estuvieras en el camino correcto. Solo necesita agregar la declaración else después de ";" después de la declaración "entonces". También dividiría la primera línea de la segunda línea con un punto y coma en lugar de 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
También en su secuencia de comandos original, al declarar maxline usó comillas invertidas "`" en lugar de comillas simples "'", lo que podría causar problemas.
No es una respuesta directa a la pregunta, pero podría usar el operador 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."