Ekspresi bash adalah kombinasi dari operator, fitur, atau nilai yang digunakan untuk membentuk pernyataan kondisional bash. Ekspresi bersyarat dapat berupa ekspresi biner atau unary yang melibatkan numerik, string, atau perintah apa pun yang status pengembaliannya nol saat berhasil.
Ada beberapa ekspresi kondisional yang dapat digunakan untuk menguji file. Berikut adalah beberapa ekspresi kondisional yang berguna.
- [ -e filepath ] Mengembalikan nilai true jika file ada.
- [ -x filepath ] Mengembalikan nilai true jika file ada dan dapat dieksekusi.
- [ -S filepath ] Mengembalikan nilai true jika file ada dan merupakan file soket.
- [ expr1 -a expr2 ] Mengembalikan nilai true jika kedua ekspresi benar.
- [ expr1 -o expr2 ] Mengembalikan nilai true jika salah satu dari ekspresi1 atau 2 benar.
Untuk ekspresi bersyarat lainnya untuk memeriksa file, string, dan numerik, silakan merujuk ke halaman manual bash.
Contoh Bash 1. Periksa Keberadaan File
Cuplikan kode skrip shell Bash berikut mendapatkan nama file dengan jalur absolutnya, dan memeriksa apakah file tersebut ada atau tidak dan ia memberikan informasi yang sesuai.
$ cat exist.sh #! /bin/bash file=$1 if [ -e $file ] then echo -e "File $file exists" else echo -e "File $file doesnt exists" fi $ ./exist.sh /usr/bin/boot.ini File /usr/bin/boot.ini exists
Lihat artikel kami sebelumnya untuk memahami berbagai jenis pernyataan bash if.
Contoh Bash 2. Bandingkan Angka
Skrip di bawah ini membaca dua bilangan bulat dari pengguna, dan memeriksa apakah kedua bilangan tersebut sama atau lebih besar atau lebih kecil dari satu sama lain.
$ cat numbers.sh #!/bin/bash echo "Please enter first number" read first echo "Please enter second number" read second if [ $first -eq 0 ] && [ $second -eq 0 ] then echo "Num1 and Num2 are zero" elif [ $first -eq $second ] then echo "Both Values are equal" elif [ $first -gt $second ] then echo "$first is greater than $second" else echo "$first is lesser than $second" fi $ ./numbers.sh Please enter first number 1 Please enter second number 1 Both Values are equal $ ./numbers.sh Please enter first number 3 Please enter second number 12 3 is lesser than 12
Jika Anda baru mengenal skrip bash, lihat tutorial Pengenalan Bash kami.
Contoh Bash 3. Kalkulator Aritmatika Dasar
Contoh ini membaca input, yang merupakan jenis operasi aritmatika yang ingin dilakukan pada variabel bash (inp1 dan inp2). Operasi aritmatika dapat berupa penjumlahan, pengurangan atau perkalian..
$ cat calculator.sh #!/bin/bash inp1=12 inp2=11 echo "1. Addition" echo "2. Subtraction" echo "3. Multiplication" echo -n "Please choose a word [1,2 or 3]? " read oper if [ $oper -eq 1 ] then echo "Addition Result " $(($inp1 + $inp2)) else if [ $oper -eq 2 ] then echo "Subtraction Result " $(($inp1 - $inp2)) else if [ $oper -eq 3 ] then echo "Multiplication Result " $(($inp1 * $inp2)) else echo "Invalid input" fi fi fi $ ./calculator.sh 1. Addition 2. Subtraction 3. Multiplication Please choose a word [1,2 or 3]? 4 Invalid input
Mengetahui cara menggunakan parameter khusus bash ( $*, $@, $#, $$, $!, $?, $-, $_ ) akan memudahkan kehidupan skrip Anda.
Contoh Bash 4. Baca dan Ping alamat IP
Skrip berikut digunakan untuk membaca alamat IP dan memeriksa apakah alamat IP dapat dijangkau, dan mencetak pesan yang sesuai.
$ cat ipaddr.sh #!/bin/bash echo "Enter the Ipaddress" read ip if [ ! -z $ip ] then ping -c 1 $ip if [ $? -eq 0 ] ; then echo "Machine is giving ping response" else echo "Machine is not pinging" fi else echo "IP Address is empty" fi $ ./ipaddr.sh Enter the Ipaddress 10.176.191.106 Pinging 10.176.191.106 with 32 bytes of data: Reply from 10.176.191.106: bytes=32 time<1ms TTL=128 Ping statistics for 10.176.191.106: Packets: Sent = 1, Received = 1, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 0ms, Maximum = 0ms, Average = 0ms Machine is giving ping response
Dalam contoh ini, -z mengembalikan nilai true jika ipaddress panjangnya nol, Ketika kondisi didahului oleh ! (meniadakan) operator, jika ekspresi salah, ia masuk ke bagian if dan dieksekusi. Jadi ketika alamat IP tidak nol, ia masuk dan memeriksa apakah alamat ip dapat dijangkau.
Contoh Bash 5. Skrip Pemasang
Skrip penginstal dari sebagian besar paket tidak akan memungkinkan untuk menjalankannya sebagai pengguna root. Script memeriksa pengguna yang mengeksekusi dan melempar kesalahan.
Skrip berikut, memungkinkan Anda untuk menjalankan skrip penginstal Oracle hanya jika pengguna yang menjalankannya bukan root.
$ cat preinstaller.sh #!/bin/bash if [ `whoami` != 'root' ]; then echo "Executing the installer script" ./home/oracle/databases/runInstaller.sh else echo "Root is not allowed to execute the installer script" fi Executing the script as a root user, # ./preinstaller.sh Root is not allowed to execute the installer script
Dalam contoh ini output dari perintah whoami dibandingkan dengan kata “root”. Untuk perbandingan string ==, !=, < dan harus digunakan dan untuk perbandingan numerik eq, ne,lt dan gt harus digunakan.
Contoh Bash 6. Tanda kurung yang disempurnakan
Dalam semua contoh di atas, kami hanya menggunakan tanda kurung tunggal untuk mengapit ekspresi bersyarat, tetapi bash mengizinkan tanda kurung ganda yang berfungsi sebagai versi sintaks tanda kurung tunggal yang disempurnakan.
$ cat enhanced.sh #!/bin/bash echo "Enter the string" read str if [[ $str == *condition* ]] then echo "String "$str has the word \"condition\" fi $ ./enhanced.sh Enter the string conditionalstatement String conditionalstatement has the word "condition"
- [ adalah sinonim untuk perintah pengujian. Bahkan jika itu dibangun di dalam shell, itu menciptakan proses baru.
- [[ adalah versi baru yang ditingkatkan, yang merupakan kata kunci, bukan program.
- [[ dipahami oleh Korn dan Bash.
- Pada contoh di atas, jika variabel $str berisi frasa “kondisi” di mana saja, kondisinya benar.
- Ini adalah fitur globbing shell, yang hanya akan didukung bila Anda menggunakan [[ (tanda kurung ganda) dan oleh karena itu banyak argumen yang tidak perlu dikutip.