Bash Scripting – Fungsi Dijelaskan Dengan Contoh

Dalam skrip shell Bash, fungsi adalah cara untuk mengelompokkan serangkaian instruksi bersama untuk mendapatkan hasil tertentu. Anda dapat menganggap fungsi sebagai skrip mini. Fungsi juga disebut prosedur dan metode dalam beberapa bahasa pemrograman. Fungsi adalah cara yang bagus untuk mencapai modularitas dan dapat digunakan kembali.

Pada artikel ini, saya akan menjelaskan cara menggunakan fungsi dalam skrip bash di Linux dengan contoh. Anda akan cukup nyaman dalam menggunakan fungsi bash pada akhir artikel ini.
Contents
Cara mendefinisikan Fungsi dalam konvensi BashNamingCara memanggil Fungsi dalam status BashExit & Mengembalikan nilaiMelewati argumen ke lingkup FunctionVariable untuk FunctionModularity dan ResubailityKesimpulanCara mendefinisikan Fungsi di Bash

Ada dua hal penting yang harus Anda pahami saat bekerja dengan fungsi.
Mendefinisikan fungsi,Memanggil fungsi.
Mirip dengan cara Anda membuat skrip bash dan menjalankannya, Anda harus mendefinisikan fungsi dan memanggilnya agar fungsi dapat dijalankan.

Ada dua cara sintaksis untuk mendefinisikan fungsi di bash. Cara pertama adalah dengan menggunakan kata kunci “fungsi” bawaan bash diikuti dengan nama fungsinya. Blok kode akan ditulis di dalam kurung kurawal {}.

function [name] {Block of code}

Cara kedua adalah membuat fungsi tanpa kata kunci “fungsi”. Mulailah dengan nama fungsi diikuti dengan tanda kurung.

[name](){Block of Code}

Yang mana yang harus dipilih? Yah, itu selalu merupakan pilihan pribadi. Memilih satu dari yang lain tidak memiliki kekurangan.

Anda juga dapat menulis fungsi satu baris yang disebut fungsi kompak. Dalam fungsi ringkas, setiap baris kode di dalam kurung kurawal dipisahkan dengan titik koma (;).

Luncurkan terminal Anda dan tulis fungsi multiline. Sekarang tekan tombol panah atas dan Anda akan melihat apa pun yang Anda tulis dalam multi-baris akan dikonversi sebagai fungsi ringkas.

[name](){ first_line; baris kedua; }

PRAKTIK TERBAIK:
Cobalah untuk memilih salah satu sintaks dan konsisten dengannya.Jika Anda bekerja dalam lingkungan kolaboratif, penting bagi setiap orang untuk mempertahankan standar yang sama saat membuat kode.Konvensi penamaan

Saat Anda membuat fungsi, Anda harus memberi nama untuk fungsi Anda. Nama fungsi harus deskriptif dan mencoba untuk menghindari nama yang sudah digunakan oleh fungsi lain, variabel, konstanta, dll. “Snake Case” adalah cara yang lebih disukai untuk memberi nama fungsi. Dalam kasus ular, kata-kata dipisahkan oleh garis bawah.

Lihat contoh di bawah ini. Saya membuat fungsi bernama "hello_world" dalam gaya kasus ular yang hanya akan mencetak hello world ke stdout (Terminal).
hello_world() { echo "Menjalankan Fungsi Hello World Sederhana" } hello_world

Cara memanggil Fungsi di Bash

Mari kita buat fungsi pembersihan sederhana bernama “log_cleanup”. Tujuan dari fungsi ini adalah untuk menghapus file “.log” yang lebih lama dari 30 hari.

log_cleanup(){echo “Menjalankan Pembersihan Pada Log Lama – 30 hari”find /home/karthick/Documents/Projects/logs/ -name ” *.log” -type f -mtime +30 -deleteecho “Pembersihan Selesai”}

Fungsi sudah ditentukan tetapi apakah itu cukup bagi fungsi untuk melakukan tugasnya? Sama sekali tidak. Anda harus memanggil fungsi untuk fungsi yang akan dieksekusi.

Untuk memanggil fungsi, cukup ketik nama fungsi setelah definisi fungsi:

#!/usr/bin/env bash #### DEFINISI FUNGSI #### log_cleanup(){ echo "Menjalankan Pembersihan Pada Log Lama - 30 hari" find /home/karthick/Documents/Projects/logs -name "*.log" -type f -mtime +30 -delete echo "Cleanup Completed" } # Memanggil fungsi log_cleanup 

Jika Anda mencoba memanggil fungsi sebelum definisi fungsi, Anda akan mendapatkan error.

line berikut 3: log_cleanup: command not found

Mengapa demikian? Saat Anda menjalankan skrip, kode akan ditafsirkan baris demi baris dari atas ke bawah. Ini akan membaca fungsi dan memuatnya ke lingkungan bash (memori). Tetapi di sini Anda memanggil fungsi tersebut bahkan sebelum penerjemah membaca dan memuat fungsi tersebut ke lingkungannya.

Ketika Anda memanggil suatu fungsi dari dalam fungsi lain, definisi fungsi Anda bisa dalam urutan apa pun kecuali fungsi pertama. Lihatlah gambar di bawah ini. Fungsi func2 dipanggil dari func1 dan func3 dipanggil dari func2 sebelum definisinya. Tetapi func1 didefinisikan terlebih dahulu dan kemudian dipanggil. Pada saat func1 dipanggil, semua definisi fungsi sudah Diinterpretasikan dan dimuat ke environment.
Exit status & Return value

Setiap perintah Linux mengembalikan status keluar (0-255). Nol dikatakan berhasil dan sisa kode keluar dikatakan gagal dengan arti yang berbeda. Demikian pula, ketika Anda menjalankan suatu fungsi, itu juga mengembalikan status keluar dari perintah yang dijalankan terakhir di function.

Biarkan saya menjalankan fungsi “pembersihan” yang sama lagi. Tetapi saya telah memberikan jalur yang tidak tersedia di mesin saya, sehingga perintah find akan gagal. Saya menggunakan $? untuk mendapatkan status keluar dalam skrip seperti yang ditunjukkan pada image.

Running Cleanup On Older Logs - 30 hari temukan: '/home/karthick/Documents/Projectss/logs': Tidak ada file atau direktori seperti itu Pembersihan Selesai Status keluar dari fungsi log_cleanup adalah 0

Status keluar yang dikembalikan dari fungsi berasal dari perintah echo yang dijalankan sebagai perintah terakhir di dalam fungsi. Ini bukan perilaku yang mungkin Anda harapkan.

Untuk mengatasi perilaku ini, Anda dapat menggunakan pernyataan “return” bawaan bash.

$ type -a returnreturn adalah shell builtin

Return menerima nilai integer [N] dan keluar dari fungsi dan memberikan nilai kembali ke pemanggilnya (fungsi). Sebelum menggunakan pernyataan pengembalian, Anda harus memahami beberapa aturan tentang cara menggunakan pernyataan pengembalian. Seperti yang dinyatakan sebelumnya, return menerima nilai integer dari 0-255. Pernyataan pengembalian akan menggunakan status keluar dari perintah yang dijalankan terakhir jika tidak ada argumen (nilai bilangan bulat) yang diteruskan atau nilainya melebihi 255.

Biarkan saya menggunakan pengembalian untuk memperbaiki perilaku fungsi “pembersihan”. Di sini saya menggunakan pernyataan bersyarat bersama dengan perintah return.

#!/usr/bin/env bash #### DEFINISI FUNGSI #### log_cleanup(){ echo "[ INFO ] - Menjalankan Pembersihan Pada Log Lama - 30 hari " if [[ -d "/home/karthick/Documents/Projectss/logs" ]] lalu cari -name "*.log" -type f -mtime +30 -delete echo "[ SUCCESS] - Cleanup Completed" else echo " [ ERROR ] - Direktori path salah... Pembersihan belum terjadi..." return 1 fi } # Memanggil fungsi log_cleanup echo "++ Status keluar dari fungsi log_cleanup adalah ==> $?"

Lihat output di bawah ini . Fungsi mengembalikan kode keluar 1 dari pernyataan kembali.

[ INFO ] - Menjalankan Pembersihan Pada Log Lama - 30 hari[ ERROR ] - Jalur direktori salah… Pembersihan belum terjadi…++ Status keluar dari fungsi log_cleanup adalah ==> 1

Passing argumen ke Function

Serupa dengan meneruskan argumen ke skrip bash Anda, fungsi juga menerima argumen. Bagian yang membingungkan adalah, fungsi menggunakan variabel khusus $1…$9 yang sama untuk mengakses argumen yang sama dengan meneruskan argumen ke skrip. Anda harus memahami apa yang terjadi ketika Anda menggunakan variabel khusus ini di dalam dan di luar function.

cat > arg_test.sh #!/bin/bash echo "Value pass in $1 is = $1" howdy(){ echo "value of $1 inside function is = $1" } howdy # Function Call

Copy dan jalankan cuplikan di atas untuk melihat perbedaannya. String “Howdy” dilewatkan sebagai argumen pertama ke script.

$ ./arg_test.sh howdyValue yang diteruskan dalam $1 is = howdyvalue dari $1 di dalam fungsi adalah =

Dari output, Anda dapat melihat $1 di dalam fungsi sedang mencetak kosong value karena $1 di dalam fungsi berbeda dari $1 di luar fungsi meskipun mereka memiliki nama yang sama.

Untuk meneruskan argumen ke fungsi, setelah nama fungsi meninggalkan spasi dan meneruskan argumen Anda seperti yang ditunjukkan pada gambar di bawah. Setiap argumen yang dipisahkan oleh spasi akan diberi variabel masing-masing $1…$N dan Anda dapat menggunakan variabel ini di dalam fungsi untuk memproses argumen.

log_cleanup $1 $2 ….. $N

Seperti yang Anda lihat pada tangkapan layar di atas, saya melewati direktori nama dan jumlah hari sebagai argumen.
Cakupan variabel untuk sebuah Fungsi

Saat Anda membuat variabel di dalam atau di luar fungsi, variabel tersebut dapat diakses secara global. Secara default, variabel dibuat dalam lingkup global.

Lihat contoh di bawah ini. Jika Anda mencoba mengakses variabel outside_function dan inside_function, nilainya dapat diakses. Ini berarti meskipun fungsi berjalan dan keluar, variabel yang dibuat di dalam fungsi dapat diakses secara global.

 #!/bin/bash outside_function="Variabel ini dari luar fungsi" func1(){ inside_function="Variabel ini dari dalam the func1" } func1 echo $outside_function echo $inside_function

Dalam beberapa bahasa pemrograman, ini mungkin bukan perilaku dan variabel yang dibuat di dalam fungsi akan tersedia selama waktu fungsi dijalankan. Tetapi di bash, perilakunya berbeda.

Untuk membuat variabel lokal ke fungsi, Anda dapat menggunakan kata kunci “lokal” bawaan bash. Kata kunci lokal akan membatasi ruang lingkup variabel dari global ke lokal dan variabel hanya dapat diakses selama fungsi run time.

#!/bin/bash outside_function="Variabel ini dari luar fungsi" func1(){ local inside_function= "Variabel ini berasal dari dalam func1" } func1 echo $outside_function echo $inside_function

Disarankan baca:
Bash Scripting – Variabel Dijelaskan Dengan Contoh
Ketika kata kunci lokal digunakan, Anda dapat menggunakan nama variabel yang sama di fungsi yang berbeda.
Heads Up: Anda harus selalu cobalah untuk menghindari penggunaan pengidentifikasi yang sudah digunakan sebagai variabel, fungsi, kata kunci bash. Contoh di atas ditampilkan hanya untuk memahami behavior.
Modularity dan Resubaility

Memahami dan menulis fungsi dapat dilakukan dalam waktu cepat. Tetapi menulis fungsi yang baik membutuhkan waktu dengan pemahaman yang lebih baik tentang lingkungan. Seperti yang telah ditunjukkan di bagian pendahuluan, dengan fungsi bash Anda dapat mencapai banyak modularitas dan reusability.

Mari kita ambil contoh. Anda telah membuat 20 skrip dan di setiap skrip, Anda telah menyertakan fungsi log_cleanup yang telah kita lihat di bagian sebelumnya untuk melakukan tugas housekeeping. Alih-alih memasukkan fungsi ini ke dalam 20 skrip, Anda dapat membuat definisi fungsi tunggal dan mengimpornya ke dalam 20 skrip. Dengan cara ini, Anda mencapai modularitas serta fungsi yang dapat digunakan kembali. Ini mirip dengan pernyataan impor di python, termasuk pernyataan di C, dll.

Lihat gambar di bawah ini. Saya telah membuat dua skrip bernama script1.sh dan script2.sh dan fungsi log_cleanup ditulis ke file terpisah bernama cleanup.sh.

Saya mengimpor fungsi dengan menjalankan perintah sumber. Perintah sumber akan menjalankan file yang diteruskan sebagai argumennya dan memuat variabel atau fungsi ke sesi bash saat ini. Dengan cara ini ketika Anda menjalankan log_cleanup dari file skrip lain, fungsi tersebut sudah dimuat ke lingkungan saat ini dan dapat diakses.

Dari gambar di atas, Anda dapat memahami bagaimana argumen membantu. Hanya ada satu definisi fungsi dan menurut kasus penggunaan, saya dapat memodifikasi fungsi untuk menerima argumen yang berbeda dan dalam skrip yang berbeda.
Heads Up: Anda juga dapat menjalankan skrip shell Anda dengan perintah sumber yang akan menjalankan skrip di shell saat ini sebagai gantinya membuat subkulit untuk menjalankan skrip.
Conclusion

Dalam panduan ini, kita telah membahas tentang fungsi Bash dan cara mendefinisikan dan memanggil fungsi dalam skrip dengan contoh. Agar nyaman dengan fungsi, Anda harus mempraktikkan fungsi dengan kasus penggunaan yang berbeda. Jika Anda memiliki pertanyaan atau umpan balik, jangan ragu untuk memberi tahu kami melalui bagian komentar di bawah.

Baca terkait:
Perbedaan Antara Mendefinisikan Variabel Bash Dengan Dan Tanpa exportBash Perintah Gema Dijelaskan Dengan Contoh Di LinuxBash Tutorial Heredoc Untuk Pemula Pengalihan Bash Dijelaskan Dengan Contoh

Wagiman Wiryosukiro

Petani Sistem Informasi, tukang las plugin & themes Wordpress. Co-Founder SistemInformasi.biz. Saat ini aktif sebagai Developer & kontributor di OpenMandriva Linux.

You may also like...

%d bloggers like this: