GNU/Linux >> Belajar Linux >  >> Linux

Bash Pemula Seri #7:Pengambilan Keputusan Dengan Jika Lain dan Pernyataan Kasus

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.


Linux
  1. Cara memprogram dengan Bash:Sintaks dan alat

  2. Bash Seri Pemula #9:Menggunakan Fungsi di Bash

  3. Bash Seri Pemula #8:Loop di Bash

  1. Membuat komputer lebih mudah diakses dan berkelanjutan dengan Linux

  2. Menavigasi shell Bash dengan pushd dan popd

  3. RHCE Ansible Series #6:Pengambilan Keputusan di Ansible

  1. Sintaks Pernyataan Bash case dan Contohnya

  2. Menggunakan Pernyataan Kasus di Bash

  3. Distro Linux hanya dengan busybox dan bash?