Mari buat skrip bash kita menjadi cerdas!
Di bagian seri bash pemula ini, Anda akan belajar cara menggunakan pernyataan bersyarat dalam skrip bash Anda untuk membuatnya berperilaku berbeda dalam skenario dan kasus yang berbeda.
Dengan cara ini Anda dapat membuat skrip bash yang jauh lebih efisien dan Anda juga dapat menerapkan pemeriksaan kesalahan dalam skrip Anda.
Menggunakan pernyataan if di bash
Konstruk paling mendasar dalam setiap struktur pengambilan keputusan adalah kondisi if. Sintaks umum dari pernyataan if dasar adalah sebagai berikut:
if [ condition ]; then
your code
fi
if
pernyataan ditutup dengan fi
(kebalikan dari jika).
Perhatikan ruang putih!
- Harus ada spasi antara tanda kurung buka dan tutup dan kondisi yang Anda tulis. Jika tidak, shell akan mengeluhkan kesalahan.
- Harus ada spasi sebelum dan sesudah operator kondisional (=, ==, <=dll). Jika tidak, Anda akan melihat kesalahan seperti "diharapkan operator unary".
Sekarang, mari kita buat contoh skrip root.sh. Skrip ini akan menggemakan pernyataan “you are root” hanya jika Anda menjalankan skrip sebagai pengguna root:
#!/bin/bash
if [ $(whoami) = 'root' ]; then
echo "You are root"
fi
whoami
perintah menampilkan nama pengguna. Dari tutorial variabel bash, Anda tahu bahwa $(command)
sintaks digunakan untuk substitusi perintah dan memberi Anda output dari perintah.
Kondisi $(whoami) = 'root'
akan benar hanya jika Anda masuk sebagai pengguna root.
Tidak percaya padaku? Anda tidak harus. Jalankan dan lihat sendiri.
Menggunakan pernyataan if-else di bash
Anda mungkin memperhatikan bahwa Anda tidak mendapatkan keluaran apa pun saat menjalankan root.sh skrip sebagai pengguna biasa. Kode apa pun yang ingin Anda jalankan ketika kondisi if dievaluasi salah dapat dimasukkan dalam pernyataan else sebagai berikut:
#!/bin/bash
if [ $(whoami) = 'root' ]; then
echo "You are root"
else
echo "You are not root"
fi
Sekarang ketika Anda menjalankan skrip sebagai pengguna biasa, Anda akan diingatkan bahwa Anda bukan pengguna root yang maha kuasa:
[email protected]:~$ ./root.sh
You are not root
Menggunakan pernyataan else if di bash
Anda dapat menggunakan pernyataan elif (else-if) kapan pun Anda ingin menguji lebih dari satu ekspresi (kondisi) secara bersamaan.
Misalnya, age.sh berikut ini skrip bash menggunakan usia Anda sebagai argumen dan akan menampilkan pesan bermakna yang sesuai dengan usia Anda:
#!/bin/bash
AGE=$1
if [ $AGE -lt 13 ]; then
echo "You are a kid."
elif [ $AGE -lt 20 ]; then
echo "You are a teenager."
elif [ $AGE -lt 65 ]; then
echo "You are an adult."
else
echo "You are an elder."
fi
Sekarang lakukan beberapa lari age.sh skrip untuk diuji dengan usia yang berbeda:
[email protected]:~$ ./age.sh 11
You are a kid.
[email protected]:~$ ./age.sh 18
You are a teenager.
[email protected]:~$ ./age.sh 44
You are an adult.
[email protected]:~$ ./age.sh 70
You are an elder.
Perhatikan bahwa saya telah menggunakan -lt
(kurang dari) kondisi pengujian dengan variabel $AGE.
Perlu diketahui juga bahwa Anda dapat memiliki beberapa elif
pernyataan tetapi hanya satu else
pernyataan dalam konstruk if dan harus ditutup dengan fi
.
Menggunakan pernyataan if bersarang di bash
Anda juga dapat menggunakan pernyataan if di dalam pernyataan if lainnya. Misalnya, lihat weather.sh following berikut ini skrip bash:
#!/bin/bash
TEMP=$1
if [ $TEMP -gt 5 ]; then
if [ $TEMP -lt 15 ]; then
echo "The weather is cold."
elif [ $TEMP -lt 25 ]; then
echo "The weather is nice."
else
echo "The weather is hot."
fi
else
echo "It's freezing outside ..."
fi
Script mengambil suhu apa pun sebagai argumen dan kemudian menampilkan pesan yang mencerminkan seperti apa cuacanya. Jika suhu lebih besar dari lima, maka pernyataan if-elif bersarang (dalam) dievaluasi. Mari kita jalankan beberapa skrip untuk melihat cara kerjanya:
[email protected]:~$ ./weather.sh 0
It's freezing outside ...
[email protected]:~$ ./weather.sh 8
The weather is cold.
[email protected]:~$ ./weather.sh 16
The weather is nice.
[email protected]:~$ ./weather.sh 30
The weather is hot.
Menggunakan pernyataan Kasus di bash
Anda juga dapat menggunakan pernyataan kasus di bash untuk mengganti beberapa pernyataan if karena terkadang membingungkan dan sulit dibaca. Sintaks umum dari konstruksi kasus adalah sebagai berikut:
case "variable" in
"pattern1" )
Command … ;;
"pattern2" )
Command … ;;
"pattern2" )
Command … ;;
esac
Perhatikan!
- Pola selalu diikuti dengan spasi dan
)
. - Perintah selalu diikuti oleh titik koma ganda
;;
. Spasi tidak wajib sebelumnya. - Pernyataan kasus diakhiri dengan
esac
(kebalikan dari kasus).
Pernyataan kasus sangat berguna ketika berhadapan dengan pencocokan pola atau ekspresi reguler. Untuk mendemonstrasikannya, lihat char.sh . berikut ini skrip bash:
#!/bin/bash
CHAR=$1
case $CHAR in
[a-z])
echo "Small Alphabet." ;;
[A-Z])
echo "Big Alphabet." ;;
[0-9])
echo "Number." ;;
*)
echo "Special Character."
esac
Script mengambil satu karakter sebagai argumen dan menampilkan apakah karakter tersebut kecil/besar alfabet, angka, atau karakter khusus.
[email protected]:~$ ./char.sh a
Small Alphabet.
[email protected]:~$ ./char.sh Z
Big Alphabet.
[email protected]:~$ ./char.sh 7
Number.
[email protected]:~$ ./char.sh $
Special Character.
Perhatikan bahwa saya telah menggunakan simbol asterisk wildcard (*) untuk mendefinisikan kasus default yang setara dengan pernyataan lain dalam kondisi if.
Kondisi pengujian di bash
Ada banyak kondisi pengujian yang dapat Anda gunakan dengan pernyataan if. Kondisi pengujian bervariasi jika Anda bekerja dengan angka, string, atau file. Anggap mereka sebagai operator logika di bash.
Saya telah menyertakan beberapa kondisi pengujian paling populer dalam tabel di bawah ini:
Kondisi | Setara |
---|---|
$a -lt $b | $a <$b |
$a -gt $b | $a> $b |
$a -le $b | $a <=$b |
$a -ge $b | $a>=$b |
$a -eq $b | $a sama dengan $b |
$a -ne $b | $a tidak sama dengan $b |
-e $FILE | $FILE ada |
-d $FILE | $FILE ada dan merupakan direktori. |
-f $FILE | $FILE ada dan merupakan file biasa. |
-L $FILE | $FILE ada dan merupakan tautan lunak. |
$STRING1 =$STRING2 | $STRING1 sama dengan $STRING2 |
$STRING1 !=$STRING2 | $STRING1 tidak sama dengan $STRING2 |
-z $STRING1 | $STRING1 kosong |
Untungnya, Anda tidak perlu mengingat kondisi pengujian apa pun karena Anda dapat mencarinya di halaman manual pengujian:
[email protected]:~$ man test
Mari buat satu skrip terakhir bernama filetype.sh yang mendeteksi apakah suatu file adalah file biasa, direktori, atau tautan lunak:
#!/bin/bash
if [ $# -ne 1 ]; then
echo "Error: Invalid number of arguments"
exit 1
fi
file=$1
if [ -f $file ]; then
echo "$file is a regular file."
elif [ -L $file ]; then
echo "$file is a soft link."
elif [ -d $file ]; then
echo "$file is a directory."
else
echo "$file does not exist"
fi
Saya sedikit meningkatkan skrip dengan menambahkan tanda centang pada sejumlah argumen. Jika tidak ada argumen atau lebih dari satu argumen, skrip akan menampilkan pesan dan keluar tanpa menjalankan sisa pernyataan dalam skrip.
Mari kita jalankan beberapa skrip untuk mengujinya dengan berbagai jenis file:
[email protected]:~$ ./filetype.sh weather.sh
weather.sh is a regular file.
[email protected]:~$ ./filetype.sh /bin
/bin is a soft link.
[email protected]:~$ ./filetype.sh /var
/var is a directory.
[email protected]:~$ ./filetype.sh
Error: Invalid number of arguments
Bonus:Bash pernyataan if else dalam satu baris
Sejauh ini semua pernyataan if else yang Anda lihat digunakan dalam skrip bash yang tepat. Itu cara yang baik untuk melakukannya tetapi Anda tidak wajib melakukannya.
Jika Anda hanya ingin melihat hasilnya di shell itu sendiri, Anda dapat menggunakan pernyataan if else dalam satu baris di bash.
Misalkan Anda memiliki skrip bash ini.
if [ $(whoami) = 'root' ]; then
echo "You are root"
else
echo "You are not root"
fi
Anda dapat menggunakan semua pernyataan if else dalam satu baris seperti ini:
if [ $(whoami) = 'root' ]; then echo "root"; else echo "not root"; fi
Anda dapat menyalin dan menempelkan di atas di terminal dan melihat sendiri hasilnya.
Pada dasarnya, Anda hanya menambahkan titik koma setelah perintah dan kemudian menambahkan pernyataan if-else berikutnya.
Luar biasa! Ini akan memberi Anda pemahaman yang baik tentang pernyataan bersyarat di Bash. Saya harap Anda menikmati membuat skrip bash Anda lebih pintar!
Anda dapat menguji pengetahuan yang baru Anda pelajari dengan mempraktikkan beberapa latihan bash sederhana dalam PDF di bawah ini. Ini termasuk solusinya juga.
Bash Bab 7 Latihan SoalMasalah dan solusinya untuk mempraktikkan apa yang baru saja Anda pelajari di bab iniBash-Bab-7-Pertanyaan-Latihan-Buku Pegangan-Linux.pdf31 KB
Nantikan minggu depan karena Anda akan belajar menggunakan berbagai konstruksi loop dalam skrip bash Anda.