Pengertian dan Fungsi Penulisan pada Shell Script - Part VI


Fungsi memainkan peran penting dalam bahasa pemrograman apa pun. Seperti banyak bahasa pemrograman sebenarnya, bash memiliki fungsi yang digunakan dengan implementasi terbatas.

Apa saja fungsinya?

Dalam pemrograman, fungsi diberi nama bagian dari suatu program yang melakukan tugas tertentu. Dalam pengertian ini, suatu fungsi adalah suatu jenis prosedur atau rutinitas. Ketika suatu fungsi dipanggil, program meninggalkan bagian kode saat ini dan mulai mengeksekusi baris pertama di dalam fungsi tersebut. Setiap kali ada kode yang berulang atau ketika tugas berulang, pertimbangkan untuk menggunakan fungsi saja.

Misalnya, pertimbangkan kasus ketika kita perlu mencari faktorial suatu bilangan pada beberapa tahapan program tertentu. Daripada menulis seluruh kode (untuk menghitung faktorial) setiap saat, kita dapat menulis bagian kode yang menghitung faktorial satu kali di dalam blok dan menggunakannya kembali pada beberapa kesempatan.

Mengapa kita menulis fungsi?

  1. Ini membantu kami menggunakan kembali kode tersebut.
  2. Meningkatkan keterbacaan program.
  3. Penggunaan variabel di dalam program secara efisien.
  4. Memungkinkan kita menguji program bagian demi bagian.
  5. Menampilkan program sebagai sekumpulan sub-langkah.
Fungsi dalam skrip shell

Sintaks umum untuk menulis fungsi dalam skrip shell mencakup cara-cara berikut.

function func_name {
	. . .
	commands
	. . .
}

or

func_name ( ) {
	. . .
	commands
	. . .
}

Opening curly braces can also be used in the second line as well.

func_name ( )
{
	. . .
	commands
	. . .
}

Anda selalu bebas menulis perintah yang valid di dalam blok fungsi ini seperti yang biasa kami lakukan di skrip shell. Sekarang mari kita coba menulis satu skrip sederhana dengan fungsi kecil di dalamnya.

#!/bin/bash

call_echo ( ) {
	echo ‘This is inside function’
}

op=$1

if [ $# -ne 1 ]; then
	echo "Usage: $0 <1/0>"
else
	if [ $1 = 0 ] ; then
		echo ‘This is outside function’
	elif [ $1 = 1 ] ; then
		call_echo
	else
		echo ‘Invalid argument’
	fi
fi

exit 0

Definisi fungsi harus mendahului pemanggilan pertama. Tidak ada yang seperti 'mendeklarasikan fungsi' sebelum memanggilnya. Dan kita selalu bisa menyarangkan fungsi di dalam fungsi.

Catatan:- Menulis fungsi kosong selalu menghasilkan kesalahan sintaksis.

Ketika fungsi yang sama didefinisikan beberapa kali, versi finallah yang dipanggil. Mari kita ambil contoh.

#!/bin/bash

func_same ( ) {
	echo ‘First definition’
}

func_same ( ) {
	echo ‘Second definition’
}

func_same

exit 0
Fungsi mengambil parameter dan mengembalikan nilai

Mari kita pelajari lebih dalam dengan mempertimbangkan fungsi yang mengambil parameter dan mengembalikan nilai. Untuk mengembalikan nilai dari suatu fungsi, kami menggunakan shell 'return' yang ada di dalamnya. Sintaksnya adalah sebagai berikut.

func_name ( ) {
	. . .
	commands
	. . .
	return $ret_val
}

Demikian pula kita dapat meneruskan argumen ke fungsi yang dipisahkan dengan spasi seperti yang diberikan di bawah ini.

func_name $arg_1 $arg_2 $arg_3

Di dalam fungsi kita dapat mengakses argumen secara berurutan seperti $1, $2, $3 dan seterusnya. Lihatlah contoh skrip berikut untuk mencari maksimal dua bilangan bulat menggunakan fungsi untuk menambah kejelasan.

#!/bin/bash

USG_ERR=7

max_two ( ) {
	if [ "$1" -eq "$2" ] ; then
		echo 'Equal'
		exit 0
	elif [ "$1" -gt "$2" ] ; then
		echo $1
	else
		echo $2
	fi
}

err_str ( ) {
	echo "Usage: $0 <number1>  <number2>"
	exit $USG_ERR
}

NUM_1=$1
NUM_2=$2
x
if [ $# -ne 2 ] ; then
	err_str
elif [ `expr $NUM_1 : '[0-9]*'` -eq ${#NUM_1} ] ; then
	if [ `expr $NUM_2 : '[0-9]*'` -eq ${#NUM_2} ] ; then  
		max_two $NUM_1 $NUM_2
	else
		err_str
	fi
else
	err_str
fi

exit 0

Hal di atas terlihat agak rumit, tetapi sederhana jika kita membaca baris-barisnya. Baris if-else if pertama disarangkan untuk tujuan validasi, yaitu untuk memeriksa jumlah dan jenis argumen dengan bantuan ekspresi reguler. Setelah itu kita memanggil fungsi dengan dua argumen baris perintah dan menampilkan hasilnya di sana. Ini karena kita tidak bisa mengembalikan bilangan bulat besar dari suatu fungsi. Cara lain untuk mengatasi masalah ini adalah dengan menggunakan variabel global untuk menyimpan hasil di dalam fungsi. Skrip di bawah menjelaskan metode ini.

#!/bin/bash

USG_ERR=7
ret_val=

max_two ( ) {
	if [ "$1" -eq "$2" ] ; then
		echo 'Equal'
		exit 0
	elif [ "$1" -gt "$2" ] ; then
		ret_val=$1
	else
		ret_val=$2
	fi
}

err_str ( ) {
	echo "Usage: $0 <number1>  <number2>"
	exit $USG_ERR
}

NUM_1=$1
NUM_2=$2

if [ $# -ne 2 ] ; then
	err_str
elif [ `expr $NUM_1 : '[0-9]*'` -eq ${#NUM_1} ] ; then
	if [ `expr $NUM_2 : '[0-9]*'` -eq ${#NUM_2} ] ; then  
		max_two $NUM_1 $NUM_2
		echo $ret_val
	else
		err_str
	fi
else
	err_str
fi

exit 0

Sekarang cobalah beberapa masalah menarik yang dijelaskan pada seri skrip shell sebelumnya menggunakan fungsi sebagai berikut.

  1. Memahami Tips Dasar Bahasa Scripting Linux Shell – Bagian I
  2. 5 Skrip Shell untuk Pemula Linux untuk Mempelajari Pemrograman Shell – Bagian II
  3. Berlayar Melalui Dunia Linux BASH Scripting – Bagian III
  4. Aspek Matematika Pemrograman Linux Shell – Bagian IV
  5. Menghitung Ekspresi Matematika dalam Bahasa Skrip Shell – Bagian V

Saya akan kembali dengan lebih banyak wawasan tentang fitur fungsional seperti penggunaan variabel lokal, rekursi, dll di bagian selanjutnya. Tetap perbarui dengan komentar.