GNU/Linux >> Belajar Linux >  >> Linux

Kondisi if/else satu baris dalam skrip shell linux

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."

Linux
  1. Bagaimana Mengurai Json Dengan Shell Scripting Di Linux?

  2. Kondisi Satu Baris Check In Makefile?

  3. Cara menggunakan fungsi shell baris perintah di Linux

  1. Simbol Backtick (`) di Linux Shell Scripting

  2. Skrip shell Linux:nomor hex ke string biner

  3. Jalankan menggabungkan beberapa perintah Linux dalam satu baris

  1. 6 Operator Rantai Baris Perintah Bash Shell di Linux

  2. Bagaimana cara mendaftar satu nama file per baris keluaran di Linux?

  3. Bagaimana cara menyisipkan baris baru di skrip shell Linux?