Jumat, 14 Mei 2010

pemrograman bash

Pengenalan Pemrograman Bash

Pendahuluan
Apa Itu Bash ? [3]

Bash adalah sebuah shell, atau interpreter perintah baris, untuk sistem operasi GNU. Namanya merupakan singkatan dari "Bourne-Again SHell", diambil dari nama Stephen Bourne, penulis shell Unix /bin/sh.

Bash sangat kompatibel dengan sh dan menyertakan fitur-fitur bermanfaat dari shell Korn (ksh) dan shell C (csh). Ia merupakan implementasi lengkap spesifikasi shell POSIX.2.

Fitur Bash [1]

Berikut ini adalah beberapa fitur yang dimiliki oleh Bash :

Pengeditan dan Pelengkapan

Bash menawarkan sebuah fasilitas pengeditan perintah baris yang mengijinkan user untuk mengedit perintah baris menggunakan perintah-perintah emacs atau vi. Pengeditan mengijinkan perbaikan dilakukan tanpa perlu menghapus hingga tempat kesalahan atau memulai baris baru. Fasilitas pengeditan mencakup sebuah fitur yang mengijinkan user untuk melengkapi perintah dan nama file.

Sejarah dan Pemasukan Kembali Perintah

Fitur sejarah Bash mengingat perintah-perintah yang dimasukkan ke shell dan memungkinkan mereka dipanggil kembali dan dieksekusi.

Kendali Kerja

Pada sistem yang mendukungnya, Bash menyediakan sebuah interface ke fasilitas kendali kerja sistem operasi, yang memungkinkan proses-proses untuk di-suspend dan dimulai kembali, dan memindahkan antara kerja foreground dan background.

Fungsi Shell dan Alias

Mekanisme ini tersedia untuk mengikatkan identifier yang dipilih user ke sebuah daftar perintah yang akan dieksekusi ketika identifier digunakan sebagai nama perintah. Fungsi-fungsi memungkinkan adanya variabel lokal dan rekursi, dan mempunyai akses ke lingkungan shell pemanggil. Alias dapat digunakan untuk membuat sebuah mnemonic untuk sebuah perintah, ekspansi sebuah kata tunggal menjadi perintah yang kompleks, atau memastikan bahwa sebuah perintah dipanggil dengan option yang tepat.

Array

Versi Bash yang lebih baru daripada bash-2.0 mendukung array terindeks dengan ukuran tidak terbatas. Subskrip untuk sebuah array adalah ekspresi aritmatika. Array dapat diberi nilai dengan sebuah sintaks penugasan campuran, dan beberapa fungsi built-in memiliki option untuk beroperasi pada variabel array.

Aritmatika

Bash memungkinkan user untuk melakukan aritmatika integer dalam sembarang basis mulai dari dua hingga enam puluh empat. Hampir semua operator aritmatika bahasa C tersedia dengan sistem dan presedensi yang sama. Ekspansi aritmatika memungkinkan sebuah ekspresi aritmatika untuk dievaluasi dan hasilnya dimasukkan ke perintah baris. Variabel shell dapat digunakan sebagai operand, dan nilai sebuah ekspresi dapat diberikan ke sebuah variabel.

Sebuah ekspresi aritmatika dapat digunakan sebagai sebuah perintah; status exit sebuah perintah adalah nilai ekspresi.

ANSI-C Quoting

Terdapat sintaks quoting baru yang memungkinkan backslash-escaped characters dalam string untuk diekspansikan menurut standar ANSI-C.

Kemampuan I/O Yang Diperluas

Bash menyediakan beberapa fitur input dan output yang tidak ada dalam sh, termasuk kemampuan untuk menspesifikasikan sebuah file atau deskriptor file untuk input dan output, baca atau tulis ke proses asinkronous menggunakan named pipes, membaca baris yang berakhiran dengan backslash, menampilkan sebuah prompt pada terminal sebelum pembacaan, format menu dan menginterpretasikan responnya ke mereka.

Keamanan

Bash menyediakan sebuah lingkungan shell yang dibatasi. Pengendalian eksekusi skrip setuid/setgid juga dimungkinkan.

Mode POSIX

Bash hampir sesuai dengan POSIX.2. Mode POSIX merubah beberapa bidang agar membuat perilaku Bash sesuai dengan standar. Dalam mode POSIX, Bash adalah POSIX.2 compliant.

Internasionalisasi

Bash menyediakan sebuah sintaks quoting baru yang memungkinkan string diterjemahkan menurut locale saat ini. Locale dapat pula dirubah, sehingga pesan shell dapat bersifat language-spesific.

Fasilitas pengeditan perintah baris memungkinkan input karakter delapan-bit, sehingga kebanyakan keluarga set karakter ISO-8859 didukung.

Cukup dengan basa-basinya, sekarang kita mulai membahas mengenai pemrograman skrip dengan menggunakan Bash. Saya harap anda semua masih bersama saya. :)

Membuat Skrip Shell

Shell skrip umumnya ditulis dengan menggunakan teks editor, misalnya vi atau emacs, yang biasanya terdiri dari perintah-perintah dan komentar. Komentar ditandai dengan tanda "#" dan terdiri dari teks yang memberitahu apa yang terjadi.

Berikut ini adalah contoh sebuah shell skrip sederhana :

#!/bin/bash

echo "Hello World"
echo "This is my first Bash script"

Simpanlah ke dalam file hello.sh. Kemudian anda dapat membuat skrip tersebut dapat dijalankan, dengan cara :

* Menjalankan bash hello.sh
* Merubah mode file tersebut menjadi dapat dieksekusi, chmod 755 hello.sh, kemudian jalankan dengan cara ./hello.sh

Baris pertama skrip di atas akan menandakan program yang akan mengeksekusi skrip. Baris ini biasanya disebut "shbang".

Simbol "#!" adalah simbol ajaib yang digunakan oleh kernel untuk mengindentifikasikan program yang akan menginterpretasi baris-baris skrip. Baris ini harus berada paling atas dalam skrip anda.

Baris ketiga akan mencetak string "Hello World" dan diakhiri dengan perpindahan baris. Baris keempat mencetak string "This is my first Bash script".

Mudah bukan ?

Selanjutnya kita akan membahas mengenai variabel.

Variabel

Memberikan Nilai Variabel

Anda dapat menggunakan variabel sama seperti pada bahasa pemrograman lainnya. Dalam Bash tidak ada tipe data, sebuah variabel dalam Bash dapat berupa bilangan, karakter, atau string karakter.

Untuk membuat sebuah variabel, anda tidak perlu mendeklarasikannya terlebih dahulu, cukup dengan memberikan nilai kepada referensinya anda sudah membuat variabel. Perhatikan cuplikan berikut :

nama="Alexander Graham Bell"

Pada cuplikan di atas, anda telah membuat sebuah variabel nama yang berisikan nilai "Alexander Graham Bell".

Mengambil Nilai Variabel

Untuk mengambil nilai sebuah variabel, dapat dilakukan dengan cara memberikan tanda dolar di awal variabel sebagai berikut :

echo "$nama"

Variabel Lokal

Variabel lokal dapat dibuat dengan menggunakan kata kunci local.

local Hello="Hello World"

Mengambil Input User

Seringkali dalam menulis sebuah skrip diperlukan input dari user, untuk melakukan hal tersebut dapat digunakan perintah read.

read adalah sebuah perintah built-in yang membaca input dari terminal atau dari sebuah file hingga sebuah baris baru. Perintah read memiliki empat buah option untuk mengendalikan perilakunya : -a, -e,-p, dan -r.

Format Keterangan
read jawaban Membaca sebuah baris dari input standar dan menyimpannya ke variabel jawaban
read -a namaarray Memasukkan daftar kata ke dalam array namaarray
read -e Digunakan dalam shell interaktif dengan efek pengeditan perintah baris
read -p prompt Menampilkan prompt, menunggu input, dan menyimpannya ke dalam variabel REPLY
read -r line Membolehkan input berisikan sebuah backslash

Berikut ini adalah sebuah contoh penggunaan perintah read di atas :

#!/bin/bash
# read.sh

echo -n "Masukkan nama anda : "
read nama
echo -e "Hallo $nama, Selamat Datang Di Linux"

Kemudian lakukan :

* Menyimpannya ke dalam file bernama read.sh.
* Membuat file tersebut dapat dieksekusi, dengan cara :

$ chmod a+x read.sh

Jika skrip di atas dijalankan, hasilnya akan tampak sebagai berikut :

\$ ./read.sh
Masukkan nama anda : Tux Si Penguin
Hallo Tux Si Penguin, Selamat Datang Di Linux

Aritmatika

Dalam bagian ini kita akan membahas mengenai operasi aritmatika dengan menggunakan Bash.

Integer
Perintah declare
Variabel-variabel dapat dideklarasikan sebagai sebuah integer dengan perintah declare -i. Jika anda berusaha untuk memberikan sembarang nilai string, bash akan mengisikan 0 ke variabel tersebut.

Operasi aritmatika dapat dilakukan pada variabel-variabel yang telah dideklarasikan sebagai integer. Jika sebuah variabel belum dideklarasikan sebagai integer, perintah let memungkinkan operasi aritmatika.

#!/bin/bash

declare -i num
num=1
num=5+num
echo $num

Hasil skrip di atas :

6

Perintah let

Perintah let adalah sebuah perintah built-in yang digunakan untuk melakukan aritmatika integer dan pengujian ekspresi numerik.

Berikut ini adalah contoh penggunaan perintah let :

#!/bin/bash

num=1
let num=5+num
echo $num

Tanda kurung ganda dapat digunakan untuk menggantikan let pada Bash 2.x. Jadi skrip di atas dapat pula ditulis sebagai berikut :

#!/bin/bash

num=1
(( num+=5 ))
echo $num

Hasil kedua buah skrip di atas adalah :

6

Floating Point

Bash hanya mendukung operasi aritmatika pada integer, namun utilitas bc, awk dapat digunakan bila anda menginginkan perhitungan yang lebih kompleks.

Contoh :

#!/bin/bash
num=`echo "scale=3; 13 / 2" | bc`
echo $num

Keterangan :

Output perintah echo di-pipe ke program bc. Skala diset ke 3, yang merupakan digit signifikan di belakang koma. Operasi yang dilakukan adalah pembagian 13 dengan 2. Seluruh pipeline diapit oleh tanda backquote (`). Substitusi perintah akan dilakukan dan hasilkan diberikan ke variabel num, yang kemudian dicetak ke layar.

Hasil skrip di atas adalah :

6.500

Kondisional

Hingga saat ini, kita telah membuat beberapa buah skrip yang menjalankan aksinya secara berurutan. Seringkali dalam melakukan pemrograman skrip dibutuhkan proses yang dapat mengambil keputusan untuk menjalankan suatu aksi atau tidak, keputusan ini diambil setelah mengevaluasi sebuah ekspresi.

Perintah test

Perintah test biasanya digunakan untuk mengevaluasi sebuah ekspresi.

Pada Bash 2.x, untuk memeriksa sebuah ekspresi dapat digunakan perintah test, atau ekspresi tersebut diapit dalam sejumlah bracket tunggal.

Perintah if

Bentuk dasar konstruksi if adalah sebagai berikut :

if [ekspresi]; then

kode_jika_ekspresi_benar

fi

Berikut ini adalah sebuah skrip sederhana yang menerapkan konstruksi di atas :

#!/bin/bash

echo -n "Masukkan sebuah password : "
read password
if [ $password = "eureka" ]; then
echo "you're right."
fi

Tampilan setelah skrip di atas dijalankan adalah sebagai berikut :

Masukkan sebuah password : eureka
you're right.

Perintah if/else

Bentuk dasar konstruksi if/else adalah sebagai berikut :

if [ekspresi]; then
kode_jika_ekspresi_benar
else
kode_jika_ekspresi_salah
fi

Dengan kembali menggunakan contoh di atas yang telah dimodifikasi :

#!/bin/bash

echo -n "Masukkan sebuah password : "
read password
if [ "$password" = "eureka" ]; then
echo "you're right."
else
echo "you're wrong."
fi

Hasil menjalankan skrip di atas :

Masukkan sebuah password : eureka
you're right.

Masukkan sebuah password : aha
you're wrong.

Perintah if/elif/else

Perintah if/elif/else memungkinkan sebuah proses pengambilan keputusan multi-cara. Jika kondisi yang mengikuti if gagal, kondisi yang mengikuti elif akan diuji. Jika berhasil, perintah setelah statemen then akan dieksekusi. Jika gagal, maka kondisi elif berikutnya akan diperiksa. Jika tidak ada yang sukses, perintah pada blok else akan dieksekusi.

Bentuk perintah ini adalah sebagai berikut :

if kondisi1
then
perintah
elif kondisi2
perintah
elif kondisi3
perintah
else
perintah
fi

Perintah case

Perintah case dapat digunakan sebagai alternatif perintah if/elif/else. Nilai variabel case dicocokkan dengan nilai1, nilai2, dan seterusnya, hingga ditemukan sebuah kecocokan. Ketika sebuah nilai cocok dengan variabel case, perintah-perintah yang mengikuti nilai tersebut dieksekusi hingga ditemukan tanda titik-koma ganda. Lalu eksekusi akan mulai setelah kata esac.

Jika variabel case tidak cocok, program akan mengeksekusi perintah setelah *), nilai baku hingga ;; atau esac ditemukan. Nilai *) berfungsi sama dengan statemen else pada kondisional if/else. Nilai case memungkinkan penggunaan wildcard shell dan tanda bar vertikal ($\vert$) untuk meng-OR-kan dua buah nilai.

Format perintah case adalah sebagai berikut :

case variabel in
nilai1)
perintah
;;
nilai2)
perintah
;;
*)
perintah
;;
esac

Looping

Looping digunakan bila anda ingin mengeksekusi suatu blok perintah berulang kali. Terdapat tiga buah konstruksi loop yang biasa digunakan, yaitu for, while, dan until.

Perintah for

Perintah for digunakan untuk melakukan perulangan dengan jumlah yang telah ditentukan sebelumnya.

Perintah for memiliki bentuk dasar sebagai berikut :

for ekspresi_kendali; do
perintah
done

Untuk lebih jelasnya mari kita lihat contoh skrip berikut ini :

#!/bin/bash
for i in $( ls ); do
echo "Nama file : "$i
done

Skrip di atas berfungsi untuk menampilkan file-file atau subdirektori-subdirektori yang ada pada direktori tempat skrip tersebut dijalankan.

Berikut ini adalah cuplikan hasil menjalankan skrip tersebut :

...
Nama file : songs
Nama file : ss12.jpg
Nama file : ssh-stream-tn.jpg
Nama file : ssh-stream.jpg
Nama file : sup.pdf
Nama file : suser-report.lyx
Nama file : tcp-stream-tn.jpg
Nama file : tcp-stream.jpg
Nama file : tcp.pdf
...

Perintah while

Perintah while digunakan untuk melakukan perulangan selama ekspresi kendali bernilai benar, ia akan berhenti ketika ekspresi kendali bernilai salah atau diberikan sebuah break eksplisit dalam kode program.

Perintah while memiliki bentuk dasar sebagai berikut :

while kondisi_ekspresi; do
perintah
done

Perhatikan contoh skrip dengan menggunakan while berikut :

#!/bin/bash
COUNTER=0
while [ $COUNTER -lt 5 ]; do
echo "counter = "$COUNTER
let COUNTER=COUNTER+1
done

Hasilnya :

counter = 0
counter = 1
counter = 2
counter = 3
counter = 4

Perintah until

Perintah until digunakan untuk melakukan perulangan selama ekspresi kendali bernilai salah, ia akan berhenti ketika ekspresi kendali bernilai benar atau diberikan sebuah break eksplisit dalam kode program.

Perintah until memiliki bentuk dasar sebagai berikut :

until kondisi_ekspresi; do
perintah
done

Berikut ini contoh sederhana penggunaan until :

#!/bin/bash
COUNTER=5
until [ $COUNTER -lt 0 ]; do
echo "counter = "$COUNTER
let COUNTER=COUNTER-1
done

Hasilnya :

counter = 5
counter = 4
counter = 3
counter = 2
counter = 1
counter = 0

Fungsi

Sama seperti pada bahasa pemrograman lainnya, anda dapat membuat sebuah fungsi untuk mengelompokkan kode yang berulang kali digunakan.

Untuk mendeklarasikan fungsi cukup dengan cara menuliskan function sebagai berikut :

function cetak()
{
...
}

Pada perintah di atas, kita mendeklarasikan sebuah fungsi dengan nama cetak.

Sementara untuk memanggilnya dapat kita lakukan dengan cara yang sama dengan cara pemanggilan program :

function keluar()
{
exit
}

function cetak()
{
echo "Hello World"
}

# utama
cetak
keluar

Tidak ada komentar:

Posting Komentar