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 memakai 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 seorang pelayan yang siap mengerjakan perintah tuannya sekaligus menyajikan hasil perintah pada kita. Karena shell hanyalah ‘pelayan’, maka jika perintahnya salah, shell pun tidak akan memberikan hasil yang diinginkan.
Shell ada bermacam-macam, di antaranya 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 mengkonfirmasikan 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. Seperti 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 scripting, buatlah sembarang file teks kosong dan tetapkan 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, emacs, Kwrite, atau lainnya:
#!/bin/bash
echo a
Baris kedua mungkin tidak asing bagi Anda, 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
a
Script1: Hubungan antara parameter dan positional variabel. Perhatikan bahwa spasi dijadikan tanda pemisah antarparameter.
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 sendiri dengan memodifikasi cara eksekusi:
$ contoh.sh
bash: contoh.sh: command not found
Setelah pengetahuan dasar sudah disampakan, Anda dapat melanjutkan ke tahapan scripting sebenarnya:
A. Menerima Parameter
Pada scripting berikut ini, Anda ingin mencetak 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
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 dipisahkan 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 jumlah 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 memeriksa 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, pernyataan kondisi selalu dilakukan dengan diapit tanda [ dan ]. Kedua, operator pembandingnya tidak memakai tanda “=” atau “<”, atau sejenisnya, tetapi berupa kumpulan huruf. Detailnya, dapat Anda lihat pada tabel berikut di bawah ini.
C. Perulangan
Mengulang suatu perintah berdasar kondisi tertentu sangat penting artinya dalam mengefisiensikan 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 seperti berikut ini.
$ cat add.sh
#!/bin/sh
for operand in “$@”
do
let tampung=tampung+operand
done
echo $tampung
$ ./add.sh 3 4 5
12
Variabel $@ berguna untuk mereferensi parameter-parameter script secara keseluruhan 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 direferensikan per kata, bukan sebagai satu string panjang.
Bagaimana dengan pengulangan while? While mengulang suatu perintah selama kondisinya benar. Apabila while digunakan sebagai ganti for (untuk contoh tadi), scriptnya akan menjadi seperti berikut 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 memasukkan 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 menambahkan 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 beberapa perintah yang dikerjakan berulang-ulang. Daripada harus menulisnya berulangkali, 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!
mas bro..minta tolong script bash nh..boleh ya…saya ada data ini bentuk nya A.txt
03/: – Adi Harianto 09949
03/01/2012 3400
03/02/2012 3400
03/02/2012 3400
03/02/2012 3400
03/05/2012 3400
03/: – Rita 12779
03/01/2012 1107
03/01/2012 1106
03/01/2012 1107
03/01/2012 1107
03/01/2012 1107
agar menjadi seperti ini bash script nya gimana ya
03/: – Adi Harianto 09949
03/01/2012 3400 09949
03/02/2012 3400 09949
03/02/2012 3400 09949
03/02/2012 3400 09949
03/05/2012 3400 09949
03/: – Rita 12779
03/01/2012 1107 12779
03/01/2012 1106 12779
03/01/2012 1107 12779
03/01/2012 1107 12779
03/01/2012 1107 12779
thank you mas bro…minta bantuan nya ya….
mas bro..minta tolong script bash nh..boleh ya…saya ada data ini bentuk nya A.txt
03/: – Adi Harianto 09949
03/01/2012 3400
03/02/2012 3400
03/02/2012 3400
03/02/2012 3400
03/05/2012 3400
03/: – Rita 12779
03/01/2012 1107
03/01/2012 1106
03/01/2012 1107
03/01/2012 1107
03/01/2012 1107
agar menjadi seperti ini bash script nya gimana ya
03/: – Adi Harianto 09949
03/01/2012 3400 09949
03/02/2012 3400 09949
03/02/2012 3400 09949
03/02/2012 3400 09949
03/05/2012 3400 09949
03/: – Rita 12779
03/01/2012 1107 12779
03/01/2012 1106 12779
03/01/2012 1107 12779
03/01/2012 1107 12779
03/01/2012 1107 12779
thank you mas bro…minta bantuan nya ya….