FUNGSI
Shell Bash menyediakan cara mudah untuk membuat fungsi di dalam skrip. Fungsi dapat dibuat menggunakan salah satu dari dua cara: dengan menulis fungsi di dalam skrip yang juga memanggilnya, atau menulis suatu “library” yang hanya berisi fungsi-fungsi dan menyertakan pustaka tersebut ke dalam skrip yang memanggil fungsi. Pada pendekatan kedua, baris:
. ./library.sh
Diletakkan di awal skrip (sebelum fungsi-fungsi di dalam library.sh dipanggil). Sebagaimana pada bahasa lain, fungsi pada shell Bash juga dapat mengembalikan suatu nilai (boleh pula tanpa ada nilai yang dikembalikan). Fungsi dapat mengembalikan nilai dengan 3 cara:
·
Mengubah status dari satu atau lebih variabel
·
Menggunakan perintah exit untuk mengakhiri skrip shell
·
Menggunakan perintah return untuk mengakhiri fungsi dan mengembalikan nilai yang dimasukkan ke bagian pemanggilan dari skrip shell
Mirip bahasa C. Perintah exit menghentikan program dan perintah return mengembalikan kontrol ke pemanggil. Perbedaannya adalah fungsi shell tidak dapat mengubah parameternya, meskipun dapat mengubah parameter-parameter global.
1 Pembuatan Fungsi
Skrip sederhana yang membuat dan menggunakan fungsi diperlihatkan kode berikut:
#!/bin/sh
#
Nama file skrip:
fungsi.sh
#
fungsi add_a_user()...
add_a_user()
{
}
USER=$1
PASSWORD=$2
shift;
shift;
# dua kali
shift, sisanya dianggap
komentar ...
COMMENTS=$@
echo
"Menambahkan pengguna $USER
..."
echo
useradd -c "$COMMENTS" $USER
echo passwd $USER
$PASSWORD
echo
"Pengguna $USER ($COMMENTS)
ditambahkan, passwordnya $PASSWORD"
#
Bagian utama dari
skrip berawal di
sini
echo
"Memulai skrip..."
add_a_user
bob letmein Bob
Holness the presenter
add_a_user
fred badpassword Fred
Durst the singer
add_a_user
bilko worsepassword Sgt.
Bilko the role
model
echo
"Akhir dari skrip..."
Baris 4 merupakan deklarasi fungsi, diakhiri dengan (). Kemudian diikuti oleh {, dan apapun yang ada sampai ditemukan pasangan } yang sesuai dikatakan sebagai kode atau isi dari fungsi tersebut. Kode ini tidak dieksekusi sampai fungsi tersebut dipanggil. Fungsi siap menerima panggilan. Perlu diketahui bahwa untuk contoh ini, perintah useradd dan passwd didahului dengan echo – ini merupakan teknik debugging yang bermanfaat untuk memeriksa apaka perintah yang tepat akan dieksekusi. Ini juga berarti bahwa anda dapat menjalankan skr tanpa menjadi root atau menambahkan account pengguna „cerdik‟ ke sistem Linux! Telah diketahui bahwa skrip shell dieksekusi secara sekuensial, runtut. Tidak demikian dengan fungsi. Dalam hal ini, fungsi add_a_user dibaca dan diperiksa sintaksnya tetapi tidak dieksekusi sampai secara eksplisit dipanggil. Eksekusi berawal dengan pernyataa echo "Start of script...". Baris berikutnya, add_a_user bob letmein Holness dikenal sebagai pemanggilan fungsi (function call) sehingga fungsi add_a_user dimasuki dan memulai eksekusi dengan penambahan tertentu ke lingkungan:
$1=bob
$2=letmein
$3=Bob
$4=Holness
$5=the
$6=presenter
Sehingga di dalam fungsi tersebut, $1 diset menjadi bob, tidak peduli apa nilai $1 diluar dari fungsi. Sehingga jika kita ingin merujuk $1 "original" di dalam fungsi tersebut, kita harus
memberikan suatu nama lain ke $1 – misalnya A=$1 sebelum kita memangg fungsi.
Kemudian, di dalam fungsi, kita dapat mengakses ke $A. Kita menggunakan perintah
shift lagi untuk mendapatkan $3 dan seterusnya, semua parameter dalam $@. Fungsi kemudian menambahkan pengguna dan menentukan passwordnya. Skrip meng-echo suatu komentar dan mengembalikan kontrol ke baris berikutnya dari kode utama.
2 Lingkup Variabel
Programmer yang telah menggunakan bahasa lain mungkin heran dengan aturan
lingkupan fungsi shell. Pada dasarnya, tidak ada batasan lingkupan selain dari paramete
($1, $2, $@, dan lain-lain). Perhatikan potongan
kode berikut:
#!/bin/sh
# Nama file
skrip: scope.sh
myfunc()
{
}
echo "Saya
telah dipanggil sebagai:
$@"
x=2
###
Skrip utama berawal
di sini
echo
"Skrip telah dipanggil
dengan $@"
x=1
echo
"x bernilai $x"
myfunc
1 2 3
echo
"x bernilai $x"
Skrip, ketika dipanggil dengan scope.sh a b c memberikan output sebagai berikut:
Skrip telah
dipanggil dengan a
b c
x
bernilai 1
Saya
telah dipanggil sebagai:
1 2 3


Tidak ada komentar:
Posting Komentar