6.19.2010

Linux Bash Script - Scripting dengan Bash

Tahukah Anda bahwa Linux memiliki scripting seperti batch file di DOS? Dengan scripting, PC Anda dapat bekerja secara otomatis tanpa banyak 'bertanya'. Walaupun saat ini eranya interface grafis, tidak semua hal cocok ditangani dengan klik mouse.
Scripting adalah salah satu bentuk pemrograman. Secara spesifik, scripting lebih dikaitkan dengan pemrograman interpreter, contohnya pada shell Bash (Bourne Again Shell) yang akan dibahas kali ini. Lalu, apa itu shell? Mungkin Anda tidak terlalu familiar dengan istilah ini, tapi sering menggunakannya. Apabila Anda me­makai program seperti xterm atau Konsole untuk mengetik perintah, berarti Anda telah menggunakan shell. Saat Anda masuk ke mode teks, Anda pun berhadapan dengan shell. Shell dapat diibaratkan se­orang pelayan yang siap mengerjakan perintah tuannya sekaligus menyajikan hasil perintah pada kita. Karena shell ha­nyalah 'pelayan', maka jika perintahnya salah, shell pun tidak akan memberikan hasil yang diinginkan.

Shell ada bermacam-macam, di antara­nya Bash, csh dan zsh. Untuk mengetahui shell yang digunakan, bisa digunakan beberapa cara:

1. Gunakan perintah set dan cek nilai variabel SHELL

$ set | grep SHELL
SHELL=/bin/bash

2. Periksa file /etc/passwd dan lihat kolom terakhir dari entry user Anda

$ cat /etc/passwd | grep mulyadi
mulyadi:x:500:500:Mulyadi Santosa:/home/
mulyadi:/bin/bash

Output-output di atas mengkonfirmasi­kan bahwa Anda sedang menggunakan shell Bash. Pada artikel ini, diasumsikan Anda telah mengetahui beberapa perintah dasar Linux dan dapat langsung berkonsentrasi pada logika dan syntax scriptingnya. Seper­ti biasa, prompt $ menunjukkan bahwa perintah dapat dilakukan oleh user non root dan prompt # berarti perintah dilakukan oleh root. Tidak ada batasan distribusi Linux apa yang harus digunakan.

Untuk memulai bekerja dengan scrip­ting, buatlah sembarang file teks kosong dan te­tapkan sebagai file executable:

$ touch coba.sh
$ chmod a+x ./coba.sh

Nama file-nya tidak harus berakhiran .sh. Ini hanyalah konvensi untuk memudahkan mengenali bahwa file ini adalah file script. Perintah chmod juga diperlukan agar file ini bisa dieksekusi. Sekali lagi, untuk praktisnya, file kita set agar bisa dieksekusi oleh semua user. Apabila Anda lupa tentang syntax chmod, baca lagi artikel di CHIP mengenai permission atau baca manual chmod.

Untuk mencobanya, isi baris berikut pada file coba.sh. Anda dapat menggunakan sembarang teks editor seperti Vi, e­macs, Kwrite, atau lainnya:

#!/bin/bash
echo a

Baris kedua mungkin tidak asing bagi An­da, tapi baris pertama mungkin terlihat aneh karena terdapat tanda #!. Tanda tersebut merupakan penanda bagi shell untuk menjalankan dulu interpreter yang dimaksud (Bash) sebelum menjalankan perintah pada baris-baris selanjutnya. Path yang diberikan merupakan path lengkap yang menunjuk ke nama program bash itu sendiri, jadi tidak bisa sekadar dicantumkan nama programnya, misalnya:

#!bash

Apabila Anda kesulitan mencari lokasi program bash, baik karena distro Linux menaruhnya di tempat lain atau Anda mengcompile sendiri shell, gunakan perintah berikut untuk mencarinya.

$ whereis bash
bash: /bin/bash

Lanjutkan dengan menjalankan file tersebut seperti contoh berikut ini.

$ ./coba.sh

File coba.sh diawali dengan ./ karena direktori tempat menyimpan file script tersebut belum tentu masuk dalam area pencarian program. Lebih tepatnya, setiap kali Anda mengetik suatu nama program tanpa didahului nama path, maka Linux akan mencarinya di lokasi sesuai isi variabel PATH:

$ echo $PATH
/usr/kerberos/bin:/usr/local/bin:/usr/bin:/bin:/
usr/X11R6/bin

Dengan asumsi file coba.sh ditaruh di home direktori Anda, maka jelas file tersebut tidak akan ditemukan secara otomatis oleh Linux. Anda dapat mencobanya sen­di­ri dengan memodifikasi cara eksekusi:

$ contoh.sh
bash: contoh.sh: command not found

Setelah pengetahuan dasar sudah disampakan, Anda dapat melanjut­kan ke tahapan scripting sebenarnya:

A. Menerima Parameter

Pada scripting berikut ini, Anda ingin men­ce­tak sesuai parameter yang diberikan. Untuk itu, ketik script berikut ini.

#!/bin/bash
echo $1
echo $2
echo $3

Lalu jalankan dengan perintah seperti di bawah ini.

$ ./coba.sh 1 2 3

Variabel $1, $2, dan seterusnya berfungsi mengambil nilai parameter sesuai urutan penulisan parameter. $1 memuat isi parameter pertama, $2 memuat isi parameter kedua, dan seterusnya. Parameter di­pisahkan oleh spasi. Jadi, setiap parameter yang dipisahkan spasi akan dianggap parameter yang terpisah. Pertanyaannya, bagaimana jika script dijalankan seperti berikut ini?

$ ./contoh.sh ‘1 2 3’
1 2 3

Ternyata seluruh string 1, 2, dan 3 dianggap sebagai satu parameter. Ini adalah salah satu trik yang bisa digunakan bila Anda berurusan dengan parameter berspasi. Kadangkala, Anda perlu memeriksa jum­lah parameter untuk mengantisipasi kesalahan pemanggilan. Untuk keperluan ini, ada variabel lainnya yang dapat Anda gunakan yaitu $#. Dengan mengadopsi variabel ini, Anda dapat membuat script yang sedikit lebih cerdas:

#!/bin/bash
if [ $# -lt 1 ]
then
echo Anda tidak memasukkan
parameter!
else
echo $1
echo $2
echo $3
fi

Script di atas mengecek berapa banyak parameter yang Anda masukkan. Apabila lebih kecil dari 1 (baris if), pesan peringatan akan ditampilkan. Apabila memang ada parameter, tiga parameter pertama akan ditampilkan. Tentang pengecekan kondisi akan diterangkan berikutnya.

B. Kondisi dan Percabangan

Contoh sederhana dari percabangan telah diberikan, yaitu If digunakan untuk me­meriksa jumlah parameter. Adapun format lengkap dari 'if-then-else' adalah:

if kondisi
then
perintah
else
perintah
fi

Bagian else dapat Anda abaikan karena bersifat optional. Perhatikan bahwa then dan else masing-masing menempati baris tersendiri, tidak sebaris dengan if. Apabila Anda memahami pemrograman C, perbedaannya terlihat pada tidak adanya tanda { atau } sebagai penanda blok.

Pernyataan kondisi (conditional statement) ada beragam jenisnya. Untuk lebih memahaminya, simak script berikut ini.

#!/bin/bash
if [ $# -lt 1 ]
then
echo Anda tidak memasukkan parameter!
exit
fi

if [ $1 -eq 0 ]
then
echo Anda memasukkan nol
elif [ $1 -lt 0 ]
then
echo lebih kecil dari nol
elif [ $1 -ge 1 -a $1 -le 10 ]
then
echo Antara 1 dan 10
else
echo Lebih besar dari 10
fi

Script ini menunjukkan dua hal. Pertama, pernya­taan kondisi selalu dilakukan de­ngan diapit tanda [ dan ]. Kedua, operator pembandingnya tidak memakai tanda “=” atau “<”, atau sejenisnya, tetapi berupa kumpulan huruf. C. Perulangan Mengulang suatu perintah berdasar kon­disi tertentu sangat penting artinya dalam mengefi­siensikan pengetikan perintah. Untuk keperluan seperti ini, tersedia for, while, dan until. Misalnya, Anda ingin menjumlahkan dua bilangan atau lebih. Dengan for, maka script-nya menjadi se­perti berikut ini. $ cat add.sh #!/bin/sh for operand in “$@” do let tampung=tampung+operand done echo $tampung $ ./add.sh 3 4 5 Variabel $@ berguna untuk mereferensi parameter-parameter script secara kese­luruhan sehingga Anda dapat mereferensikan parameter tersebut, berapa pun banyaknya, secara fleksibel. Namun, agar variabel $@ dapat digunakan oleh for dengan benar, variabel tersebut harus diapit oleh tanda petik ganda (“ ”). Ini dilakukan agar setiap parameter dapat direferensi­kan per kata, bukan sebagai satu string panjang. Bagaimana dengan pengulangan while? While mengulang suatu perintah selama kondisinya benar. Apabila while diguna­kan sebagai ganti for (untuk contoh tadi), scriptnya akan menjadi seperti be­rikut ini. #!/bin/sh let tampung=tampung+$1 while [ $# -gt 1 ] do shift let tampung=tampung+$1 done echo “$tampung” Perhatikan perintah shift yang digunakan di atas. Perintah ini berguna untuk menggeser posisi parameter sehingga parameter kedua menjadi parameter pertama, parameter ketiga menjadi kedua, dan seterusnya. Parameter pertama sendiri menjadi hilang. Shift secara default menggeser sebanyak satu posisi ke nomor parameter yang lebih rendah. D. Membaca Input User Input tidak harus berupa parameter yang dipakai saat script akan dijalankan, tetapi dapat juga diberikan saat script sedang dijalankan (dieksekusi). Perintah yang Anda perlukan di sini adalah read serta variabel penampung data. Berikut ini akan diberikan contoh sederhana perhitungan kuadrat dari suatu bilangan. Script akan terus meminta input sampai user memasukkan angka nol. Untuk mencegah user mema­sukkan bilangan yang terlalu besar, maka angkanya dibatasi maksimal tiga digit. #!/bin/bash declare -i angka=0 read -p “Masukkan angka [ ‘0’ untuk berhen­ ti ]: “ -n 3 angka while [ $angka -ne 0 ] do let kuadrat=angka**2; echo -e “\nKuadrat dari $angka adalah $ku adrat”; read -p “Masukkan angka [ ‘0’ untuk berhen ti ]: “ -n 3 angka done Opsi -p berguna untuk menambah­kan string prompt yang Anda inginkan, sedangkan -n mendefinisikan berapa maksimum karakter yang dapat dimasukkan. Anda pun dapat menggunakan perintah declare untuk mendefinisikan variabel angka sebagai integer. Dengan cara ini, jika data yang dimasukkan bukan berupa angka, perulangannya akan otomatis berhenti karena akan disamakan dengan angka nol. E. Membuat Fungsi Dalam sebuah script, dapat ditemukan be­berapa perintah yang dikerjakan berulang-ulang. Daripada harus menulisnya ber­ulangkali, akan lebih efisien jika Anda membuat fungsi yang berisi kumpulan perintah tersebut. Pada contoh sederhana berikut ini akan dideklarasikan fungsi untuk memeriksa apakah suatu angka adalah bilangan prima atau bukan. Fungsi ini selanjutnya dipakai dalam sebuah looping untuk memeriksa deretan angka 1 sampai dengan 100. #!/bin/bash hitung() { local count=0 for a in `factor $1` do let count++ done if [ $count -gt 2 ] then echo “$1 bukan bilangan prima” else echo “$1 bilangan prima” fi } for angka in `seq 1 100` do hitung $angka; done Caranya juga sama seperti cara Anda mengakses parameter shell script. Perlu diingat bahwa positional variable di dalam fungsi hanya mengakses nilai parameter fungsi, bukan parameter dari shell script! Di sini juga terlihat deklarasi variabel count, tetapi menggunakan perintah local. Dengan perintah ini, count hanya bisa diakses di dalam fungsi hitung dan menjadi tidak berarti pada fungsi atau badan script utama. Ini adalah cara yang baik untuk mencegah suatu variabel dimanipulasi di luar fungsi yang menggunakannya. Artikel ini hanya membahas 'segelintir' bagian shell scripting yang sifatnya cukup kompleks. Gabungkan informasi-informasi yang telah Anda pelajari dalam artikel ini untuk membuat satu shell script yang membantu tugas sehari-hari Anda. Kemungkinannya tidak terbatas! Ketik 'info bash' untuk melihat informasi lengkap mengenai Bash.
Artikel yang lengkap bisa anda lihat di sini

Tidak ada komentar:

Posting Komentar