GNU/Linux >> Belajar Linux >  >> Linux

Shell Scripting Bagian 3:Struktur Kontrol Keputusan dalam Shell Script

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:


case in
<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


Linux
  1. Array Asosiatif Dalam Skrip Shell?

  2. Deskriptor File &Skrip Shell?

  3. Urutkan Bagian Dari File?

  1. Penguncian yang Benar Dalam Skrip Shell?

  2. Ekstensi File Untuk Skrip Unix Shell?

  3. pindahkan hanya jika file ada dalam skrip shell

  1. Shell Scripting Bagian V:Fungsi di Bash

  2. Temukan apakah file ada atau tidak di HDFS menggunakan skrip shell

  3. Bagaimana cara menghapus string apa pun dari file melalui skrip Shell?