BASH : operator OR ( || ) dan and ( && )

cd /tmp || exit 2

Apakah makna dari double pipe “||” ini ? Tanda || pada baris perintah “shell atau perl” mengacu pada: OR. jadi skrip kita mengandung perintah “ lakukan perintah pertama || \ OR perintah kedua ”

Jika perintah pertama berhasil, perintah kedua tidak akan dieksekusi, itu berarti perintah kedua akan di eksekusi jika exit status perintah pertama tidak sama dengan 0. operator ini adalah kebalikan dari operator “&&”, dimana perintah kedua akan dieksekusi jika dan hanya jika exit status perintah pertama sama dengan 0

contoh :

$ ls file_tidak_ada.txt || echo TIDAK_ADA
 ls: cannot access this_tidak_ada.txt: No such file or directory
 TIDAK_ADA
$ ls file_ada.txt && echo ADA
 file_ada.txt
 ADA


jadi apa gunanya?

misal kita ingin membuat sebuah perintah yang akan dieksekusi secara berulang sebanyak n kali sampai perintah itu berhasil dijalankan .

contoh kita akan menguji dengan 3 kali percobaan, apakah koneksi internet tersambung, dengan waktu jeda 15 detik. menggunakan wget (pada bash):

#!/bin/bash

for i in {1..3} 
do 
   wget -q --tries=10 --timeout=20 --spider http://www.blankonlinux.or.id && break || sleep 15

done

Happy hacking 🙂

Grant user ke tabel spesifik pada database spesifik

Suatu saat si kampret mendapat tugas untuk memberikan hak akses melihat, menambah, dan menghapus data kepada tole pada suatu database server, yang memuat ribuan database yang didalamnya terdapat ribuan tabel dengan hak untuk mengedit data pada tabel dengan awatabelpilihan_ yang terdapat pada semua database dengan nama awalan database_ . setelah di cek ternyata si kampret harus memberikan akses pada 10000 tabel kepada tole, karena si kampret adalah orang yang pemalas, dengan pengetahuan seadanya  dibuatlah baris kode berikut supaya si kampret dapat segera tidur setelah semalaman dia ga tidur gara – gara harus bekerja hingga larut malam.

mysql -u kampret -ppassword -e “show databases like ‘databasepilihan_%'” | xargs -I {} echo {} | sed 1d > dbpilihan

pada baris pertama sikampret yang kebetulan menggunakan linux mengambil nama database yang dipilih, yaitu nama-nama database yang akan dipilih tabelnya dan memasukkan hasilnya kedalam sebuah berkas berjudul dbpilihan

for i in $(cat dbpilihan) ; do mysql -u kampret -ppassword -e “show tables from $i like ‘tabelpilihan_%'” | xargs -I {} echo $i.{} | sed 1d; done > tblpilihan_

pada perintah selanjutnya si kampret melakukan pembacaan perbaris pada berkas dbpilihan yang digunakan untuk menyeleksi tabel yang akan diberikan hak aksesnya kepada tole, kemudian memasukkan hasilnya kedalam tblpilihan_

for i in $(cat tblpilihan_) ; do mysql -u kampret -ppassword -e “GRANT SELECT, INSERT, UPDATE, DELETE ON $i to ‘tole’@’%'” ; done

Pada perintah terakhir si kampret melakukan pembacaan pada berkas hasil dan dengan perulangan dia melakukan pemberian kekuasaan kepada tole. dengan 3 langkah diatas si kampret berhasil menghemat beberapa jam untuk melakukan grant user pada 10000 tabel yang berbeda.