Cara Menggunakan Pernyataan Bash If (Dengan 4 Contoh)
Diterbitkan: 2023-05-08if
then
fi
. Tambahkan kata kunci elif
untuk ekspresi bersyarat tambahan, atau kata kunci else
untuk menentukan bagian kode penampung-semua yang dijalankan jika tidak ada klausa bersyarat sebelumnya yang dijalankan.Semua skrip Bash non-sepele perlu membuat keputusan. Pernyataan Bash if memungkinkan skrip Linux Anda mengajukan pertanyaan dan, bergantung pada jawabannya, menjalankan bagian kode yang berbeda. Begini cara kerjanya.
Apa itu Eksekusi Bersyarat?
Di semua skrip Bash kecuali yang paling sepele, biasanya ada kebutuhan untuk aliran eksekusi untuk mengambil jalur yang berbeda melalui skrip, sesuai dengan hasil keputusan. Ini disebut eksekusi bersyarat.
Salah satu cara untuk memutuskan cabang eksekusi mana yang akan diambil adalah dengan menggunakan pernyataan if
. Anda mungkin mendengar pernyataan if
disebut pernyataan if then
, atau pernyataan if then else
. Mereka nama yang berbeda untuk hal yang sama.
Pernyataan if
mengatakan bahwa jika sesuatu benar, maka lakukan ini . Tetapi jika sesuatu itu salah, lakukan itu saja. “Sesuatu” bisa berupa banyak hal, seperti nilai variabel, keberadaan file, atau apakah dua string cocok.
Eksekusi bersyarat sangat penting untuk skrip yang bermakna. Tanpa itu, Anda sangat terbatas pada apa yang bisa Anda lakukan untuk skrip Anda. Kecuali itu dapat membuat keputusan yang berarti, Anda tidak akan dapat mengambil masalah dunia nyata dan menghasilkan solusi yang bisa diterapkan.
Pernyataan if
mungkin merupakan cara yang paling sering digunakan untuk mendapatkan eksekusi bersyarat. Inilah cara menggunakannya dalam skrip Bash.
TERKAIT: Cara Memeriksa Apakah File Ada di Linux Bash Scripts
Contoh Pernyataan If Sederhana
Ini adalah bentuk kanonik dari pernyataan if
yang paling sederhana:
jika [kondisi-ini-benar] Kemudian jalankan-pernyataan-ini fi
Jika kondisi di dalam teks menjadi benar, baris skrip di klausa then
dieksekusi. Jika Anda melihat skrip yang ditulis oleh orang lain, Anda mungkin melihat pernyataan if
ditulis seperti ini:
if [kondisi-ini-benar]; Kemudian jalankan-pernyataan-ini fi
Beberapa hal yang perlu diperhatikan:
- Pernyataan
if
diakhiri dengan menulisfi
. - Harus ada spasi setelah tanda kurung pertama ”
[
” dan sebelum tanda kurung kedua ”]
” dari pengujian bersyarat. - Jika Anda akan meletakkan kata kunci
then
pada baris yang sama dengan uji kondisional, pastikan Anda menggunakan titik koma ”;
” setelah ujian.
Kita dapat menambahkan klausa else
opsional agar beberapa kode dieksekusi jika uji kondisi terbukti salah. Klausa else
tidak membutuhkan kata kunci then
.
jika [kondisi-ini-benar] Kemudian jalankan-pernyataan-ini kalau tidak jalankan-pernyataan-ini-sebagai gantinya fi
Skrip ini menunjukkan contoh sederhana pernyataan if
yang menggunakan klausa else
. Tes bersyarat memeriksa apakah usia pelanggan lebih besar atau sama dengan 21. Jika ya, pelanggan dapat memasuki tempat, dan klausa then
dijalankan. Jika mereka belum cukup umur, klausa else
dijalankan, dan mereka tidak diizinkan masuk.
#!/bin/bash customer_age=25 jika [ $customer_age -ge 21 ] Kemudian gema "Ayo masuk." kalau tidak gema "Kamu tidak bisa masuk." fi
Salin skrip dari atas ke editor, simpan sebagai file bernama "if-age.sh", dan gunakan perintah chmod
untuk membuatnya dapat dieksekusi. Anda harus melakukannya dengan setiap skrip yang kita diskusikan.
chmod +x if-age.sh
Mari jalankan skrip kita.
./if-age.sh
Sekarang kita akan mengedit file dan menggunakan usia kurang dari 21 tahun.
customer_age=18
Buat perubahan itu pada skrip Anda, dan simpan perubahan Anda. Jika kita menjalankannya sekarang, kondisi kembali salah, dan klausa lain dijalankan.
./if-age.sh
Klausul Elif
Klausa elif
menambahkan tes kondisional tambahan. Anda dapat memiliki klausa elif
sebanyak yang Anda suka. Mereka dievaluasi pada gilirannya sampai salah satu dari mereka ditemukan benar. Jika tidak ada tes kondisional elif
yang terbukti benar, klausa else
, jika ada, akan dijalankan.
Skrip ini meminta nomor lalu memberi tahu Anda apakah itu ganjil atau genap. Nol adalah bilangan genap, jadi kita tidak perlu menguji apapun.
Semua angka lainnya diuji dengan menemukan modulo dari pembagian dengan dua. Dalam kasus kita, modulo adalah bagian pecahan dari hasil pembagian dua. Jika tidak ada bagian pecahan, angka tersebut habis dibagi dua, persis. Oleh karena itu merupakan bilangan genap.
#!/bin/bash echo -n "Masukkan angka:" membaca nomor jika [ $angka -eq 0 ] Kemudian echo "Anda memasukkan nol. Nol adalah bilangan genap." elif [ $(($angka % 2)) -eq 0 ] Kemudian echo "Anda memasukkan $angka. Ini adalah bilangan genap." kalau tidak echo "Anda memasukkan $angka. Angka ganjil." fi
Untuk menjalankan skrip ini, salin ke editor dan simpan sebagai "if-even.sh", lalu gunakan chmod untuk membuatnya dapat dieksekusi.
Mari jalankan skrip beberapa kali dan periksa hasilnya.
./jika-genap.sh
Itu semua bekerja dengan baik.
Berbagai Bentuk Tes Bersyarat
Tanda kurung ” []
” yang kami gunakan untuk pengujian bersyarat kami adalah cara singkat untuk memanggil program test
. Karena itu, semua perbandingan dan pengujian yang mendukung test
tersedia untuk pernyataan if
Anda.
Ini hanya beberapa di antaranya:
- ! ekspresi : Benar jika ekspresi salah.
- -n string : Benar jika panjang string lebih besar dari nol.
- -z string : Benar jika panjang string adalah nol. Artinya, ini adalah string kosong.
- string1 = string2 : Benar jika string1 sama dengan string2.
- string1 != string2 : True jika string1 tidak sama dengan string2.
- integer1 -eq integer2 : Benar jika integer1 secara numerik sama dengan integer2
- integer1 -qt integer2 : Benar jika integer1 secara numerik lebih besar dari integer2
- integer1 -lt integer2 : Benar jika integer1 secara numerik lebih kecil dari integer2
- -d directory : Benar jika direktori itu ada.
- -e file : Benar jika file itu ada.
- -s file : True jika file tersebut ada dengan ukuran lebih dari nol.
- -r file : Benar jika file tersebut ada dan izin baca disetel.
- -w file : Benar jika file tersebut ada dan izin menulis disetel.
- -x file : Benar jika file ada dan izin eksekusi diatur.
Dalam tabel, "file" dan "direktori" dapat menyertakan jalur direktori, baik relatif maupun absolut.
Tanda sama dengan “ =
” dan uji persamaan -eq
tidak sama. Tanda sama dengan melakukan perbandingan teks karakter demi karakter . Tes kesetaraan melakukan perbandingan numerik .
Kita dapat melihat ini dengan menggunakan program test
pada baris perintah.
uji "string ini" = "string ini"
uji "string ini" = "string itu"
tes 1 = 001
uji 1 -eq 001
Dalam setiap kasus, kami menggunakan perintah echo
untuk mencetak kode pengembalian dari perintah terakhir. Nol berarti benar, satu berarti salah.
Menggunakan tanda sama dengan ” =
” memberi kita jawaban yang salah dengan membandingkan 1 dengan 001. Itu benar, karena keduanya adalah rangkaian karakter yang berbeda. Secara numerik nilainya sama—satu—sehingga operator -eq
mengembalikan respons yang sebenarnya.
Jika Anda ingin menggunakan pencocokan karakter pengganti dalam pengujian bersyarat, gunakan sintaks kurung ganda ” [[ ]]
”.
#!/bin/bash jika [[ $USER == *ve ]] Kemudian gema "Halo $USER" kalau tidak echo "$USER tidak diakhiri dengan 've'" fi
Skrip ini memeriksa nama akun pengguna saat ini. Jika diakhiri dengan “ ve
”, nama pengguna akan dicetak. Jika tidak diakhiri dengan " ve
", skrip akan memberi tahu Anda, dan selesai.
./jika-liar.sh
TERKAIT: Pengujian Bersyarat di Bash: if, then, else, elif
Pernyataan Jika Bersarang
Anda dapat memasukkan pernyataan if
di dalam pernyataan if
lainnya.
Ini sangat bisa diterima, tetapi if
pernyataan bersarang membuat kode menjadi kurang mudah dibaca, dan lebih sulit dipertahankan. Jika Anda mendapati diri Anda menumpuk lebih dari dua atau tiga tingkat pernyataan if
, Anda mungkin perlu mengatur ulang logika skrip Anda.
Inilah skrip yang menggunakan hari sebagai angka, dari satu sampai tujuh. Satu hari Senin, tujuh hari Minggu.
Ini memberitahu kita jam buka toko. Jika itu adalah hari kerja atau Sabtu, itu melaporkan toko buka. Jika hari Minggu, kabarnya toko tutup.
Jika toko terbuka, pernyataan if
bersarang membuat pengujian kedua. Jika hari Rabu, itu memberitahu kita bahwa itu hanya buka di pagi hari.
#!/bin/bash # dapatkan hari sebagai nomor 1..7 hari=$(tanggal +"%u") jika [ $hari -le 6 ] Kemudian ## toko buka jika [ $hari -eq 3 ] Kemudian # Rabu adalah setengah hari echo "Pada hari Rabu kami hanya buka di pagi hari." kalau tidak # hari minggu reguler dan Sabtu gema "Kami buka sepanjang hari." fi kalau tidak # tidak buka pada hari Minggu echo "Ini hari Minggu, kami tutup." fi
Salin skrip ini ke editor, simpan sebagai file bernama "if-shop.sh", dan buat agar dapat dieksekusi menggunakan perintah chmod
.
Kami menjalankan skrip satu kali dan kemudian mengubah jam komputer menjadi hari Rabu, dan menjalankan kembali skrip tersebut. Kami kemudian mengubah hari menjadi hari Minggu dan menjalankannya sekali lagi.
./jika-toko.sh
./jika-toko.sh
./jika-toko.sh
TERKAIT: Cara Menggunakan Tes Bersyarat Braket Ganda di Linux
Kasus Untuk jika
Eksekusi bersyarat adalah apa yang memberi kekuatan pada pemrograman dan skrip, dan pernyataan if
yang sederhana mungkin merupakan cara yang paling umum digunakan untuk mengalihkan jalur eksekusi dalam kode. Tapi itu tidak berarti itu selalu jawabannya.
Menulis kode yang baik berarti mengetahui opsi apa yang Anda miliki dan mana yang terbaik untuk digunakan untuk menyelesaikan persyaratan tertentu. Pernyataan if
memang bagus, tetapi jangan biarkan itu menjadi satu-satunya alat di tas Anda. Secara khusus, lihat pernyataan case
yang dapat menjadi solusi dalam beberapa skenario.
TERKAIT: Cara Menggunakan Pernyataan Kasus dalam Skrip Bash