Pour résumer les autres réponses, pour un usage général :
Multi-lignes si...alors déclaration
if [ foo ]; then
a; b
elif [ bar ]; then
c; d
else
e; f
fi
Version monoligne
if [ foo ]; then a && b; elif [ bar ]; c && d; else e && f; fi
Utiliser l'opérateur OR
( foo && a && b ) || ( bar && c && d ) || e && f;
Remarques
N'oubliez pas que les opérateurs AND et OR évaluent si oui ou non le code résultat de l'opération précédente était égal à true/success (0
). Ainsi, si une fonction personnalisée renvoie autre chose (ou rien du tout), vous pouvez rencontrer des problèmes avec le raccourci AND/OR. Dans de tels cas, vous pouvez remplacer quelque chose comme ( a && b )
avec ( [ a == 'EXPECTEDRESULT' ] && b )
, etc.
Notez également que (
et [
sont techniquement des commandes, donc un espace est nécessaire autour d'eux.
Au lieu d'un groupe de &&
des déclarations comme then a && b; else
, vous pouvez également exécuter des instructions dans un sous-shell comme then $( a; b ); else
, même si c'est moins efficace. La même chose est vraie pour faire quelque chose comme result1=$( foo; a; b ); result2=$( bar; c; d ); [ "$result1" -o "$result2" ]
au lieu de ( foo && a && b ) || ( bar && c && d )
. Bien qu'à ce stade, vous vous lanceriez de toute façon davantage dans des éléments multilignes moins compacts.
Il semble que vous étiez sur la bonne voie. Vous avez juste besoin d'ajouter l'instruction else après le ";" après l'instruction « alors ». De plus, je séparerais la première ligne de la deuxième ligne avec un point-virgule au lieu de la joindre avec "&&".
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
Toujours dans votre script d'origine, lors de la déclaration de maxline, vous utilisiez des back-ticks "`" au lieu de guillemets simples "'", ce qui pouvait causer des problèmes.
Ce n'est pas une réponse directe à la question, mais vous pouvez simplement utiliser l'opérateur 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."