GNU/Linux >> Belajar Linux >  >> Linux

Fungsi Bash &Cara Menggunakannya {Variabel, Argumen, Pengembalian}

Pendahuluan

Fungsi bash adalah metode yang digunakan dalam skrip shell untuk mengelompokkan blok kode yang dapat digunakan kembali. Fitur ini tersedia untuk sebagian besar bahasa pemrograman, yang dikenal dengan nama berbeda seperti prosedur, metode, atau subrutin.

Artikel ini memberikan gambaran lengkap tentang fungsi bash, cara kerjanya, dan cara menggunakannya.

Prasyarat

  • Sistem yang menjalankan Linux.
  • Akses ke terminal dan shell Bash.
  • Editor teks untuk menulis skrip bash (panduan ini menggunakan Vim).

Apa Itu Fungsi Bash?

Fungsi bash adalah teknik untuk mengelompokkan bit kode yang dapat digunakan kembali di bawah satu nama untuk digunakan nanti. Fungsi bash seperti skrip di dalam skrip.

Menggunakan fungsi dalam skrip bash hadir dengan dua manfaat :

1. Sebuah fungsi dibaca langsung ke dalam memori shell dan disimpan untuk digunakan nanti. Karena memori komputer tidak menjadi masalah saat ini, menggunakan fungsi lebih cepat daripada mengulang kode.

2. Fungsi membantu mengatur skrip shell panjang menjadi blok kode modular dan dapat digunakan kembali. Potongan lebih mudah dikembangkan dan dipelihara .

Bagaimana Cara Menggunakan Fungsi Bash?

Ada dua cara untuk mengimplementasikan fungsi Bash:

  • Di dalam skrip shell, di mana definisi fungsi harus sebelum panggilan apa pun pada fungsi tersebut.
  • Bersama perintah bash alias lainnya dan langsung di terminal sebagai perintah.

Untuk menggunakan fungsi bash, ikuti garis besar di bawah ini.

Sintaks Fungsi Bash

Ada dua cara berbeda untuk mendeklarasikan fungsi bash:

1. Format yang paling banyak digunakan adalah:

<function name> () { 
        <commands> 
}

Atau, fungsi yang sama dapat berupa satu baris:

<function name> () { <commands>; }

2. Cara alternatif untuk menulis fungsi bash adalah menggunakan kata khusus function :

function <function name> {
        <commands>
}

Atau dalam satu baris:

function <function name> { <commands>; }

Perhatikan perilaku dan tip berikut saat menggunakan fungsi:

  • Saat menulis dalam satu baris, perintah harus diakhiri dengan titik koma (; ), baik dalam skrip bash atau terminal secara langsung.
  • Menambahkan function kata yang dicadangkan menjadikan tanda kurung opsional.
  • Perintah di antara kurung kurawal { <commands> } disebut tubuh fungsi itu . Tubuh dapat berisi sejumlah deklarasi, variabel, loop, atau pernyataan kondisional.
  • Coba gunakan nama deskriptif untuk fungsi. Meskipun tidak diperlukan saat menguji fungsi dan perintah, nama deskriptif membantu dalam pengaturan di mana pengembang lain melihat kode.

Bagaimana Cara Mendeklarasikan dan Memanggil Fungsi?

Sebuah fungsi tidak dijalankan saat dideklarasikan. Badan fungsi dijalankan saat dipanggil setelah deklarasi. Ikuti langkah-langkah di bawah ini untuk membuat skrip bash dengan berbagai opsi sintaks:

1. Menggunakan editor teks favorit Anda, buat skrip shell bernama sintaks . Jika Anda menggunakan Vim, jalankan baris berikut di terminal:

vim syntax.sh

2. Tambahkan kode di bawah ini ke skrip shell:

# syntax.sh
# Declaring functions using the reserved word function
# Multiline
function f1 {
        echo Hello I\'m function 1
        echo Bye!
}
# One line
function f2 { echo Hello I\'m function 2; echo Bye!; }

# Declaring functions without the function reserved word
# Multiline
f3 () { 
        echo Hello I\'m function 3
        echo Bye!
}
# One line
f4 () { echo Hello I\'m function 4; echo Bye!; }

# Invoking functions
f4
f3
f2
f1

Skrip melakukan hal berikut:

  • Baris 4-9 mendemonstrasikan cara mendefinisikan fungsi menggunakan function kata yang dipesan. Fungsi f1 menggunakan sintaks multiline pada baris 4-6, sedangkan f2 menggunakan sintaks satu baris pada baris 9.
  • Baris 13-18 menunjukkan sintaks yang lebih familiar. f3 adalah fungsi multiline yang didefinisikan pada baris 13-16, sedangkan f4 pada baris 18 adalah padanan baris tunggal.
  • Baris 21-24 aktifkan fungsi yang ditentukan sebelumnya dan jalankan perintah di badan fungsi yang sesuai. Panggilan dibuat dalam urutan terbalik dari definisi.

3. Simpan skrip dan tutup Vim:

:wq

4. Buat syntax.sh file yang dapat dieksekusi:

chmod +x syntax.sh

5. Terakhir, jalankan script untuk melihat output:

./syntax.sh

Bagaimana Mendeklarasikan dan Memanggil Fungsi di Terminal?

Untuk mendeklarasikan dan menggunakan fungsi di terminal:

1. Buka terminal dan masukkan baris berikut:

my_function () { echo "Hello I'm a function"; echo "Bye!"; }

2. Jalankan fungsi dengan memasukkan nama fungsi di terminal:

my_function

Output menjalankan perintah di badan fungsi.

Fungsi hanya tetap ditentukan dalam sesi terminal saat ini. Untuk menyimpan untuk sesi mendatang, tambahkan kode ke ~/.bashrc berkas.

Di mana Fungsi Bash Didefinisikan?

Untuk melihat di mana fungsi bash didefinisikan dan isinya, masukkan perintah berikut di terminal:

1. Jalankan bash shell dalam mode debugger:

bash --debugger

2. Periksa file sumber fungsi dengan:

declare -F <function name>

Misalnya:

declare -F my_function

Output mencetak nama fungsi, nomor baris, dan lokasi file di mana definisi fungsi berada.

3. Untuk melihat konten fungsi, jalankan:

declare -f <function name>

Misalnya:

declare -f my_function

declare built-in dalam mode debugging memungkinkan melihat konten dan lokasi fungsi tanpa menjalankan kode.

Bagaimana Cara Menghapus Fungsi Bash?

Jika Anda perlu mengosongkan namespace yang ditempati oleh suatu fungsi di sesi terminal saat ini, jalankan:

unset <function name>

Misalnya:

unset my_function

Fungsi tidak lagi tersedia di sesi terminal saat ini. Namun, jika kodenya ada di ~/.bashrc file, semuanya dikembalikan normal di sesi berikutnya.

Variabel Fungsi Bash

Variabel dalam bash bersifat global secara default dan dapat diakses dari mana saja, termasuk badan fungsi. Variabel yang didefinisikan di dalam suatu fungsi juga bersifat global. Menambahkan kata kunci local membuat istilah hanya dapat diakses di dalam fungsi dan fungsi/proses turunan.

Dalam pelingkupan dinamis , variabel lokal bayangan variabel global ketika keduanya membawa nama yang sama.

Coba skrip bash berikut untuk mendemonstrasikan cara kerja variabel fungsi di bash:

1. Buat skrip bernama variable.sh :

vim variable.sh

2. Tambahkan kode berikut ke skrip:

var1=1
var2=1
change() {
        echo Inside function
        echo Variable 1 is: $var1
        echo Variable 2 is: $var2
        local var1=5
        var2=5
        echo
        echo After change inside function
        echo Variable 1 is locally $var1
        echo Variable 2 is globally $var2
}
echo Before function invocation
echo Variable 1 is: $var1
echo Variable 2 is: $var2
echo
change
echo
echo After function invocation
echo Variable 1 is: $var1
echo Variable 2 is: $var2

Script menunjukkan sebagai berikut:

  • Baris 1-2 mendeklarasikan variabel var1 dan var2 dan atur keduanya ke 1 .
  • Baris 5-6 berada di dalam badan fungsi dan mencetak variabel ke konsol. Karena cakupan variabel bersifat global, nilai aslinya akan dicetak.
  • Baris 7 mendeklarasikan variabel lokal baru dengan nama yang sama dengan variabel global var1 . local var1 membayangi var1 global global nilai karena pelingkupan dinamis.
  • Baris 8 mengubah nilai global var2 variabel.
  • Baris 14-22 cetak nilai variabel sebelum dan sesudah memanggil fungsi.

3. Simpan skrip dan keluar dari Vim:

:wq

4. Ubah hak akses file menjadi executable:

chmod +x variable.sh

5. Jalankan skrip dan analisis hasilnya:

./variable.sh

Nilai variabel dicetak ke konsol melalui perubahan yang dibuat dalam skrip.

Argumen Fungsi Bash

Untuk meneruskan argumen ke suatu fungsi, tambahkan parameter setelah pemanggilan fungsi dipisahkan dengan spasi. Tabel di bawah ini menguraikan opsi yang tersedia saat bekerja dengan argumen fungsi bash.

Argumen Peran
$0 Menyimpan nama fungsi saat didefinisikan di terminal. Saat didefinisikan dalam skrip bash, $0 mengembalikan nama dan lokasi skrip.
$1 , $2 , dll. Sesuai dengan posisi argumen setelah nama fungsi.
$# Menampung hitungan argumen posisi yang diteruskan ke fungsi.
[email protected] dan $* Pegang daftar argumen posisi dan fungsinya sama saat digunakan dengan cara ini.
"[email protected]" Memperluas daftar untuk memisahkan string. Misalnya "$1", "$2" , dll.
"$*" Memperluas daftar menjadi satu string, memisahkan parameter dengan spasi. Misalnya "$1 $2" dll.

Ikuti langkah-langkah di bawah ini untuk menguji cara kerja berbagai argumen dalam suatu fungsi.

1. Buat skrip bernama argumen :

vim arguments.sh

2. Tambahkan kode berikut ke dalam skrip:

arguments () {
        echo The function location is $0
        echo There are $# arguments
        echo "Argument 1 is $1"
        echo "Argument 2 is $2"
        echo "<[email protected]>" and "<$*>" are the same.
        echo List the elements in a for loop to see the difference!
        echo "* gives:"
        for arg in "$*"; do echo "<$arg>"; done
        echo "@ gives:"
        for arg in "[email protected]"; do echo "<$arg>"; done
}

arguments hello world

3. Simpan skrip dan keluar dari Vim:

:wq

4. Jadikan skrip dapat dieksekusi:

chmod +x arguments.sh

5. Jalankan skrip:

./arguments.sh

Outputnya menampilkan pesan deskriptif untuk setiap argumen yang digunakan.

Pengembalian Fungsi Bash

Fungsi Bash berbeda dari kebanyakan bahasa pemrograman dalam hal mengembalikan nilai dari suatu fungsi. Secara default, bash mengembalikan status keluar dari perintah yang terakhir dieksekusi di badan fungsi.

Skrip di bawah ini menunjukkan cara menentukan status keluar menggunakan return:

1. Buat skrip dan beri nama test.sh :

vim test.sh

2. Tambahkan fungsi berikut ke file:

test_function() {
        echo Test
        return 100
}
echo The function\'s output is: 
test_function
echo The exit status is:
echo $?

3. Simpan dan tutup editor teks:

:wq

4. Ubah izin:

chmod +x test.sh

5. Jalankan skrip untuk melihat output fungsi dan status keluar:

./test.sh

Metode alternatif adalah untuk menggemakan hasil fungsi dan menetapkan output ke variabel. Edit test.sh script dengan kode berikut:

test_function() {
        echo Test
}
result=$(test_function)
echo $result is saved in a variable for later use

Metode ini meniru cara kerja sebagian besar bahasa pemrograman saat menggunakan fungsi.


Linux
  1. Cara menggunakan perintah riwayat Bash

  2. Bagaimana cara menggunakan baris file sebagai argumen perintah?

  3. bagaimana cara menggunakan kill SIGUSR2 di bash?

  1. Cara Menggunakan if else Conditionals Statement di Bash Script

  2. Cara menggunakan input dalam skrip shell Anda

  3. cara menggunakan $1 dengan benar dalam sebuah alias dengan dua argumen

  1. Bagaimana Memanggil Fungsi Bash Dalam Skrip Bash Di Dalam Awk?

  2. Cara Membuat dan Memanggil Fungsi di Bash

  3. Bagaimana cara menghapus atau menghapus fungsi bash?