Untuk meringkas jawaban lain, untuk penggunaan umum:
Berbaris jika...maka pernyataan
if [ foo ]; then
a; b
elif [ bar ]; then
c; d
else
e; f
fi
Versi baris tunggal
if [ foo ]; then a && b; elif [ bar ]; c && d; else e && f; fi
Menggunakan operator ATAU
( foo && a && b ) || ( bar && c && d ) || e && f;
Catatan
Ingatlah bahwa operator AND dan OR mengevaluasi apakah kode hasil dari operasi sebelumnya sama dengan true/success (0
). Jadi jika fungsi kustom mengembalikan sesuatu yang lain (atau tidak sama sekali), Anda mungkin mengalami masalah dengan singkatan DAN/ATAU. Dalam kasus seperti itu, Anda mungkin ingin mengganti sesuatu seperti ( a && b )
dengan ( [ a == 'EXPECTEDRESULT' ] && b )
, dll.
Perhatikan juga bahwa (
dan [
secara teknis adalah perintah, jadi diperlukan spasi di sekitarnya.
Alih-alih sekelompok &&
pernyataan seperti then a && b; else
, Anda juga dapat menjalankan pernyataan dalam subkulit seperti then $( a; b ); else
, meskipun ini kurang efisien. Hal yang sama berlaku untuk melakukan sesuatu seperti result1=$( foo; a; b ); result2=$( bar; c; d ); [ "$result1" -o "$result2" ]
bukannya ( foo && a && b ) || ( bar && c && d )
. Meskipun pada saat itu Anda akan lebih banyak membahas hal-hal yang tidak terlalu padat dan multi-baris.
Sepertinya Anda berada di jalur yang benar. Anda hanya perlu menambahkan pernyataan lain setelah ";" mengikuti pernyataan "maka". Juga saya akan memisahkan baris pertama dari baris kedua dengan titik koma alih-alih menggabungkannya dengan "&&".
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
Juga di skrip asli Anda, saat mendeklarasikan maxline, Anda menggunakan tanda centang "`" alih-alih tanda kutip tunggal "'" yang dapat menyebabkan masalah.
Ini bukan jawaban langsung untuk pertanyaan tetapi Anda bisa menggunakan operator 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."