Unix / Linux - Fungsi Shell

Pada bab ini, kita akan membahas secara detail tentang fungsi shell. Fungsi memungkinkan Anda memecah keseluruhan fungsionalitas skrip menjadi subbagian logis yang lebih kecil, yang kemudian dapat dipanggil untuk melakukan tugas individualnya saat diperlukan.

Menggunakan fungsi untuk melakukan tugas berulang adalah cara terbaik untuk berkreasi code reuse. Ini adalah bagian penting dari prinsip pemrograman berorientasi objek modern.

Fungsi shell mirip dengan subrutin, prosedur, dan fungsi dalam bahasa pemrograman lain.

Membuat Fungsi

Untuk mendeklarasikan suatu fungsi, cukup gunakan sintaks berikut -

function_name () { 
   list of commands
}

Nama fungsi Anda adalah function_name, dan itulah yang akan Anda gunakan untuk memanggilnya dari tempat lain di skrip Anda. Nama fungsi harus diikuti dengan tanda kurung, diikuti dengan daftar perintah yang diapit oleh tanda kurung.

Contoh

Contoh berikut menunjukkan penggunaan fungsi -

#!/bin/sh

# Define your function here
Hello () {
   echo "Hello World"
}

# Invoke your function
Hello

Setelah dieksekusi, Anda akan menerima output berikut -

$./test.sh
Hello World

Meneruskan Parameter ke Fungsi

Anda dapat menentukan fungsi yang akan menerima parameter saat memanggil fungsi tersebut. Parameter ini akan diwakili oleh$1, $2 dan seterusnya.

Berikut adalah contoh di mana kami melewatkan dua parameter Zara dan Ali dan kemudian kami menangkap dan mencetak parameter ini dalam fungsinya.

#!/bin/sh

# Define your function here
Hello () {
   echo "Hello World $1 $2"
}

# Invoke your function
Hello Zara Ali

Setelah eksekusi, Anda akan menerima hasil berikut -

$./test.sh
Hello World Zara Ali

Mengembalikan Nilai dari Fungsi

Jika Anda menjalankan file exit perintah dari dalam suatu fungsi, pengaruhnya tidak hanya untuk menghentikan eksekusi fungsi tetapi juga program shell yang memanggil fungsi tersebut.

Jika Anda hanya ingin menghentikan eksekusi fungsi, maka ada cara untuk keluar dari fungsi yang ditentukan.

Berdasarkan situasi tersebut, Anda dapat mengembalikan nilai apa pun dari fungsi Anda menggunakan return perintah yang sintaksnya sebagai berikut -

return code

Sini code bisa apa saja yang Anda pilih di sini, tetapi jelas Anda harus memilih sesuatu yang bermakna atau berguna dalam konteks skrip Anda secara keseluruhan.

Contoh

Fungsi berikut mengembalikan nilai 10 -

#!/bin/sh

# Define your function here
Hello () {
   echo "Hello World $1 $2"
   return 10
}

# Invoke your function
Hello Zara Ali

# Capture value returnd by last command
ret=$?

echo "Return value is $ret"

Setelah eksekusi, Anda akan menerima hasil berikut -

$./test.sh
Hello World Zara Ali
Return value is 10

Fungsi Bersarang

Salah satu fitur yang lebih menarik dari fungsi adalah mereka dapat memanggil dirinya sendiri dan juga fungsi lainnya. Fungsi yang memanggil dirinya sendiri dikenal sebagai arecursive function.

Contoh berikut menunjukkan penumpukan dua fungsi -

#!/bin/sh

# Calling one function from another
number_one () {
   echo "This is the first function speaking..."
   number_two
}

number_two () {
   echo "This is now the second function speaking..."
}

# Calling function one.
number_one

Setelah eksekusi, Anda akan menerima hasil berikut -

This is the first function speaking...
This is now the second function speaking...

Panggilan Fungsi dari Prompt

Anda dapat meletakkan definisi untuk fungsi yang umum digunakan di dalam file .profile. Definisi ini akan tersedia setiap kali Anda masuk dan Anda dapat menggunakannya pada prompt perintah.

Atau, Anda dapat mengelompokkan definisi dalam sebuah file, misalnya test.sh, lalu jalankan file di shell saat ini dengan mengetik -

$. test.sh

Ini memiliki efek menyebabkan fungsi yang ditentukan di dalam test.sh untuk dibaca dan didefinisikan ke shell saat ini sebagai berikut -

$ number_one
This is the first function speaking...
This is now the second function speaking...
$

Untuk menghapus definisi fungsi dari shell, gunakan perintah unset dengan .fpilihan. Perintah ini juga digunakan untuk menghapus definisi variabel ke shell.

$ unset -f function_name