一般的な使用のために、他の回答を要約するには:
複数行 if...then 声明
if [ foo ]; then
a; b
elif [ bar ]; then
c; d
else
e; f
fi
単行版
if [ foo ]; then a && b; elif [ bar ]; c && d; else e && f; fi
OR 演算子の使用
( foo && a && b ) || ( bar && c && d ) || e && f;
メモ
AND および OR 演算子は、前の操作の結果コードが true/success (0
) に等しいかどうかを評価することに注意してください。 )。そのため、カスタム関数が何か他のものを返す (または何も返さない) 場合、AND/OR 短縮形で問題が発生する可能性があります。そのような場合、 ( a && b )
のようなものに置き換えたいと思うかもしれません ( [ a == 'EXPECTEDRESULT' ] && b )
で など
(
にも注意してください および [
は技術的にはコマンドであるため、前後に空白が必要です。
&&
のグループの代わりに then a && b; else
のようなステートメント 、 then $( a; b ); else
のようなサブシェルでステートメントを実行することもできます 、ただし、これは効率が低下します。 result1=$( foo; a; b ); result2=$( bar; c; d ); [ "$result1" -o "$result2" ]
のようなことをする場合も同じです ( foo && a && b ) || ( bar && c && d )
の代わりに .とにかく、その時点で、コンパクトではない複数行のものにもっと夢中になるでしょう.
まるで正しい軌道に乗っているかのようです。 「;」の後にelseステートメントを追加するだけです。 「then」ステートメントに続きます。また、最初の行と 2 番目の行を「&&」で結合するのではなく、セミコロンで分割します。
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
また、元のスクリプトでは、maxline を宣言するときに、問題を引き起こす可能性がある単一引用符 "'" の代わりにバッククォート "`" を使用しました。
質問に対する直接的な回答ではありませんが、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."