Hai! Kami telah membahas dasar-dasar skrip shell seperti menerima input, memproses data melalui operasi aritmatika dan menghasilkan dan menampilkan output di bagian sebelumnya dari tutorial ini (bagian 1 dan bagian 2). Pada bagian ini, kita akan masuk lebih dalam ke topik yang lebih maju dalam bahasa pemrograman -- membuat keputusan dalam sebuah program, tapi kali ini kita akan melakukannya dengan menggunakan bash shell. Mari kita mulai!
Pengantar
Sebagian besar bahasa pemrograman kami saat ini dapat membuat keputusan berdasarkan kondisi yang kami tetapkan. Kondisi adalah ekspresi yang mengevaluasi nilai Boolean - benar atau salah. Setiap programmer dapat membuat programnya cerdas berdasarkan keputusan dan logika yang dia masukkan ke dalam programnya. Shell bash mendukung pernyataan keputusan if dan switch (case).
Pernyataan if
If adalah pernyataan yang memungkinkan pemrogram untuk membuat keputusan dalam program berdasarkan kondisi yang ditentukannya. Jika kondisi terpenuhi, program akan mengeksekusi baris kode tertentu, sebaliknya, program akan menjalankan tugas lain yang ditentukan programmer. Berikut adalah sintaks yang didukung dari pernyataan if di bash shell.
Sintaks Umum
Keputusan tunggal:
if <condition>
then
### series of code goes here
fi
Keputusan ganda:
if <condition>
then
### series of code if the condition is satisfied
else
### series of code if the condition is not satisfied
fi
Kondisi multiple if:
if <condition1>
then
### series of code for condition1
elif <condition2>
then
### series of code for condition2
else
### series of code if the condition is not satisfied
fi
Sintaks kurung tunggal
if [ condition ]
then
### series of code goes here
fi
Sintaks kurung ganda
if ((condition))
then
### series of code goes here
fi
Sintaks braket tunggal adalah sintaks tertua yang didukung di bash shell. Ini digunakan bersama dengan semua pernyataan bersyarat di Linux. Sementara itu, sintaks kurung ganda digunakan untuk pernyataan kondisional berbasis angka untuk menyediakan sintaks yang familiar bagi programmer. Semua jenis pernyataan if memerlukan kondisi tertentu untuk menjalankan tugas.
Pernyataan Bersyarat di Linux
Pernyataan bersyarat digunakan bersama dengan pernyataan kendali keputusan. Ada berbagai jenis pernyataan kondisional yang dapat Anda gunakan di bash shell, yang paling umum adalah:kondisi berbasis file, berbasis string, dan berbasis aritmatika.
Kondisi berbasis file
Kondisi berbasis file adalah ekspresi unary dan sering digunakan untuk memeriksa status file. Daftar berikut menunjukkan kondisi berbasis file yang paling umum digunakan di bash shell.
Operator | Deskripsi |
-sebuah file | Mengembalikan nilai true jika file ada |
-b file | Mengembalikan nilai true jika file ada dan merupakan file khusus blok |
-c file | Mengembalikan nilai true jika file ada dan merupakan file khusus karakter |
-d file | Mengembalikan nilai true jika file ada dan merupakan direktori |
-e file | Mengembalikan nilai true jika file ada |
-r file | Mengembalikan nilai true jika file ada dan dapat dibaca |
-s file | Mengembalikan nilai true jika file ada dan berukuran lebih besar dari nol |
-s file | Mengembalikan nilai true jika file ada dan berukuran lebih besar dari nol |
-w file | Mengembalikan nilai true jika file ada dan dapat ditulis |
-x file | Mengembalikan nilai true jika file ada dan dapat dieksekusi |
-N file | Mengembalikan nilai true jika file ada dan telah dimodifikasi sejak terakhir dibaca |
Membuat keputusan berbasis file
Mari kita ambil contoh yang akan mengilustrasikan cara membuat keputusan berbasis file dalam skrip bash. Dalam contoh ini, kami akan membuat skrip yang menentukan apakah file tersebut ada di direktori beranda.
#!/bin/bash
cd
ls
if [ -e sample.sh ]
then
echo "file exists!"
else
echo "file does not exist"
fi
Dalam contoh ini, kami memastikan bahwa shell akan kembali ke direktori home terlepas dari direktori aktif kami saat ini menggunakan perintah cd. Selain itu, perintah ls digunakan untuk menampilkan daftar file dalam direktori agar kami dapat memverifikasi file tersebut benar-benar ada atau tidak. Seperti yang Anda lihat, skrip mengeluarkan teks "file ada!" karena sample.sh ada di direktori home.
Note: The shell compiler is very strict in terms of syntax especially with spaces. There should be a space between if and the open bracket and in between brackets and the condition.
Sekarang mari kita perbaiki skrip kita dengan membuat kode kita lebih dinamis dengan mengizinkan pengguna memasukkan nama skrip dan menentukan izin file yang diberikan.
#!/bin/bash
cd
ls -l
read -p "Enter a file name: " filename
if [ -e $filename ]
then
echo "file exists!"
if [ -r $filename ]
then
status="readable "
fi
if [ -w $filename ]
then
status=$status"writable "
fi
if [ -x $filename ]
then
status=$status"executable"
fi
echo "file permission: "$status
else
echo "file does not exist"
fi
Kondisi Berbasis String
Membuat keputusan berdasarkan input pengguna string juga dimungkinkan di bash shell. Kondisi berbasis string mengembalikan ekspresi biner sebagai hasil yang berarti, mengembalikan nilai true jika kondisi yang ditentukan terpenuhi jika tidak, mengembalikan false. Berikut ini adalah operator kondisional berbasis string yang umum digunakan:
Operator | Deskripsi |
== | Mengembalikan nilai true jika string sama |
!= | Mengembalikan nilai true jika string tidak sama |
-n | Mengembalikan nilai true jika string yang akan diuji bukan null |
-z | Mengembalikan nilai true jika string yang akan diuji adalah null |
Mari kita buat contoh skrip menggunakan pernyataan kondisional berbasis string. Script akan memungkinkan pengguna untuk memasukkan dua string dan menilai apakah salah satu string adalah null, kedua string sama dan tidak sama.
#!/bin/bash
read -p "First String: " str1
read -p "Second String: " str2
if [ -z "$str1" ]
then
echo "The 1st string is null"
elif [ -z "$str2" ]
then
echo "The 2nd string is null"
else
if [ $str1 == $str2 ]
then
echo "The strings are equal"
else
echo "The strings are not equal"
fi
fi
Kondisi Berbasis Aritmatika
Shell menyediakan beberapa cara dalam mendeklarasikan kondisi berbasis aritmatika. Pertama adalah dengan menggunakan mnemonik yang dapat digunakan bersama dengan sintaks kurung tunggal gaya lama dan yang lainnya menggunakan simbol yang ramah matematika yang dapat digunakan bersama dengan kurung ganda
Di bawah ini adalah daftar mnemonik yang tersedia untuk pernyataan kondisional berbasis aritmatika di shell:
Operator | Penggunaan/Deskripsi |
-eq | Sama |
-ge | Lebih Besar dari atau Sama |
-gt | Lebih Besar dari |
-le | Kurang dari atau Sama dengan |
-lt | Kurang dari |
-ne | Tidak Sama |
Mari buat skrip yang menerima bilangan bulat dari pengguna dan menentukan apakah bilangan bulat itu adalah bilangan nol, negatif, ganjil, atau genap.
#!/bin/bash
read -p "Enter an integer: " int1
if [ $int1 -eq 0 ]
then
echo "Zero"
elif [ $int1 -lt 0 ]
then
echo "Negative"
else
if [ $((int1%2)) -eq 0 ]
then
echo "Even"
else
echo "Odd"
fi
fi
Operator aritmatika untuk sintaks kurung ganda:
Operator | Penggunaan/Deskripsi |
== | Sama |
>= | Lebih Besar dari atau Sama |
> | Lebih Besar dari |
<= | Kurang dari atau Sama dengan |
Kurang dari | |
!= | Tidak Sama |
Sekarang, mari kita merekonstruksi skrip sebelumnya dan menggunakan sintaks kurung ganda:
#!/bin/bash
read -p "Enter an integer: " int1
if (( $int1 == 0 ))
then
echo "Zero"
elif (( $int1 < 0 ))
then
echo "Negative"
else
if (( $((int1%2)) == 0 ))
then
echo "Even"
else
echo "Odd"
fi
fi
Beralih Pernyataan
Pernyataan switch adalah jenis pernyataan bersyarat lainnya dalam skrip shell. Hal ini memungkinkan programmer untuk membandingkan beberapa nilai terhadap variabel dengan cara yang lebih mudah dibandingkan dengan pernyataan kondisional if. Sintaks untuk pernyataan switch adalah:
casein
<pattern1>)
##series of code for pattern1
;;
<pattern2>)
##series of code for pattern2
;;
<patternN>)
##series of code for patternN
;;
*)
##default statements
esac
Pola adalah nilai yang mungkin dari variabel. Setiap pola dipisahkan dengan titik koma ganda yang berfungsi sebagai pernyataan break dari pola tersebut. Pernyataan switch ditutup dengan pernyataan esac.
#!/bin/bash
clear
read -p "Integer1: " int1
read -p "Integer2: " int2
echo "======================"
printf "Menu: \n[a] Addition\n[b]Subtraction\n[c]Multiplication\n[d]Division\n"
echo "======================"
read -p "Your choice: " choice
res=0
case $choice in
a)
res=$((int1+int2))
;;
b)
res=$((int1-int2))
;;
c)
res=$((int1*int2))
;;
d)
res=$((int1/int2))
;;
*)
echo "Invalid input"
esac
echo "The result is: " $res
Kesimpulan
Shell bash menyediakan banyak alat yang berguna untuk programmer. Sama seperti kebanyakan bahasa pemrograman saat ini, ia juga mampu membuat keputusan bersyarat yang membuat skrip shell lebih interaktif dan cerdas. Kami akan menampilkan struktur kontrol berulang di seri berikutnya. 'Sampai waktu berikutnya.
Referensi
- http://www.gnu.org/software/bash/manual/html_node/Bash-Conditional-Expressions.html
- https://linuxacademy.com/blog/linux/conditions-in-bash-scripting-if-statements/
Pelajaran berikutnya: Struktur Kontrol Pengulangan