GNU/Linux >> Belajar Linux >  >> Linux

Bash Scripting Part6 – Membuat dan Menggunakan Fungsi Bash

Sebelum kita berbicara tentang fungsi bash, mari kita bahas situasi ini. Saat menulis skrip bash, Anda akan menemukan bahwa Anda menggunakan kode yang sama di banyak tempat.

Jika Anda bosan menulis baris kode yang sama berulang-ulang di skrip bash Anda, alangkah baiknya jika Anda menulis blok kode sekali dan menyebutnya di mana saja di skrip bash Anda.

Shell bash memungkinkan Anda melakukannya dengan Fungsi .

Fungsi bash adalah blok kode yang dapat Anda gunakan kembali di mana saja dalam kode Anda. Kapan pun Anda ingin menggunakan blok kode ini dalam skrip Anda, Anda cukup mengetikkan nama fungsi yang diberikan padanya.

Kita akan berbicara tentang cara membuat fungsi bash Anda dan cara menggunakannya dalam skrip shell.

Membuat fungsi

Anda dapat mendefinisikan fungsi seperti ini:

functionName() {}

Tanda kurung () diperlukan untuk mendefinisikan fungsi.

Selain itu, Anda dapat menentukan fungsi menggunakan kata kunci fungsi, tetapi kata kunci ini tidak digunakan lagi karena portabilitas POSIX.

function functionName() { # Definisi usang tetapi masih digunakan dan berfungsi}

Dalam definisi kedua, tanda kurung tidak diperlukan.

Menggunakan fungsi

#!/bin/bashmyfunc() { echo "Menggunakan fungsi"}total=1 while [ $total -le 3 ]; do myfunc total=$(($total + 1))doneecho "Loop selesai"myfuncecho "Akhir skrip"

Di sini kita telah membuat sebuah fungsi bernama myfunc, dan untuk memanggilnya, kita cukup mengetikkan namanya.

Anda dapat memanggil fungsi tersebut sebanyak yang Anda inginkan.

Perhatikan:Jika Anda mencoba menggunakan fungsi yang tidak didefinisikan, apa yang akan terjadi?

#!/bin/bashtotal=1 while [ $total -le 3 ]; do myfunc total=$(($total + 1))doneecho "Loop End"myfunc() { echo "Menggunakan fungsi ..."}echo "Akhir skrip"

Oh, ini error karena tidak ada fungsi seperti itu.

Pemberitahuan lain:nama fungsi bash harus unik. Jika tidak, fungsi baru akan membatalkan fungsi lama tanpa kesalahan.

#!/bin/bashmyfunc() { echo "Definisi fungsi pertama"}myfuncfunction myfunc() { echo "Definisi fungsi kedua"}myfuncecho "Akhir skrip"

Seperti yang Anda lihat, definisi fungsi kedua mengambil kendali dari yang pertama tanpa kesalahan, jadi berhati-hatilah saat mendefinisikan fungsi.

Menggunakan perintah kembali

Perintah return mengembalikan integer dari fungsi.

Ada dua cara menggunakan perintah return; cara pertama seperti ini :

#!/bin/bashmyfunc() { read -p "Masukkan nilai:" value echo "adding value" return $(($value + 10))}myfuncecho "Nilai baru adalah $?"

Fungsi myfunc menambahkan 10 ke variabel  $value lalu menampilkan jumlah menggunakan $? Variabel.

Jangan jalankan perintah apa pun sebelum mendapatkan nilai fungsi, karena variabelnya $? mengembalikan status baris terakhir.

Metode pengembalian ini mengembalikan bilangan bulat. Bagaimana dengan mengembalikan string?

Menggunakan keluaran fungsi

Cara kedua mengembalikan nilai dari fungsi bash adalah substitusi perintah. Dengan cara ini, Anda dapat mengembalikan apa pun dari fungsi tersebut.

#!/bin/bashmyfunc() { read -p "Masukkan nilai:" value echo $(($value + 10))}result=$(myfunc)echo "Nilainya adalah $result"

Meneruskan parameter

Kami dapat menangani fungsi bash seperti cuplikan kecil yang dapat kami gunakan kembali, dan tidak apa-apa, tetapi kami perlu membuat fungsi tersebut seperti mesin, kami memberikannya sesuatu, dan mengembalikan hasil berdasarkan apa yang kami berikan.

Anda dapat menggunakan variabel lingkungan untuk memproses parameter yang diteruskan ke fungsi. Nama fungsi dideklarasikan sebagai variabel $0, dan parameter yang diteruskan adalah $1, $2, $3, dll.

Anda bisa mendapatkan jumlah parameter yang diteruskan ke fungsi menggunakan ($# ) variabel.

Kami melewati parameter seperti ini:

myfunc $val1 10 20

Contoh berikut menunjukkan cara menggunakan variabel ($#):

#!/bin/bashaddnum() { if [ $# -gt 2 ]; lalu echo "Parameter salah lewat" # Jika parameter tidak sama dengan 2 else echo $(($1 + $2)) # Jika tidak, tambahkan fi}echo -n "Menambahkan 10 dan 15:"value=$(addnum 10 15)echo $valueecho -n "Menambahkan tiga angka:"value=$(addnum 10 15 20)echo $value

Fungsi addnum mendapatkan jumlah parameter yang diteruskan. Jika lebih dari 2 lulus, ia mengembalikan -1.

Jika ada satu parameter, fungsi addnum menambahkan parameter ini dua kali. Jika dua parameter dilewatkan, fungsi addnum menambahkannya bersama-sama, dan jika Anda mencoba menambahkan tiga parameter, itu akan mengembalikan -1.

Jika Anda mencoba menggunakan parameter yang diteruskan di dalam fungsi, gagal:

#!/bin/bashmyfunc() { echo $(($1 + $2 + $3 + $4))}if [ $# -eq 4 ]; lalu value=$(myfunc) echo "Total=$value"else echo "Parameter yang lolos seperti ini:myfunc a b c d"fi

Sebagai gantinya, Anda harus mengirimnya ke fungsi seperti ini:

#!/bin/bashmyfunc() { echo $(($1 + $2 + $3 + $4))}if [ $# -eq 4 ]; lalu value=$(myfunc $1 $2 $3 $4) echo "Total=$value"else echo "Parameter yang lolos seperti ini:myfunc a b c d"fi

Sekarang berhasil!!

Memproses variabel dalam fungsi Bash

Setiap variabel yang kita gunakan memiliki ruang lingkup; cakupannya adalah visibilitas variabel ke skrip Anda.

Anda dapat mendefinisikan dua jenis variabel:

  • Global
  • Lokal

Variabel global

Mereka terlihat dan valid di mana saja di skrip bash. Anda bahkan bisa mendapatkan nilainya dari dalam fungsi.

Jika Anda mendeklarasikan variabel global di dalam suatu fungsi, Anda bisa mendapatkan nilainya dari luar fungsi.

Variabel apa pun yang Anda deklarasikan adalah variabel global secara default. Jika Anda mendefinisikan variabel di luar fungsi, Anda memanggilnya di dalam fungsi tanpa masalah:

#!/bin/bashmyfunc() { input=$(($input + 10))}read -p "Masukkan angka:" inputmyfuncecho "Nilai baru adalah:$input"

Jika Anda mengubah nilai variabel di dalam fungsi, nilainya akan diubah di luar fungsi.

Lalu bagaimana cara mengatasi hal seperti ini? Gunakan variabel lokal.

Variabel lokal

Jika Anda menggunakan variabel di dalam fungsi saja, Anda dapat mendeklarasikannya sebagai variabel lokal menggunakan kata kunci lokal  seperti ini:

tmp lokal=$(( $val + 10 ))

Jadi, jika Anda memiliki dua variabel, satu di dalam fungsi dan yang lainnya di luar fungsi, dan keduanya memiliki nama yang sama, keduanya tidak akan saling memengaruhi.

#!/bin/bashmyfunc() { local tmp=$(($val + 10)) echo "Fungsi Temp dari dalam adalah $tmp"}tmp=4myfuncecho "Suhu dari luar adalah $tmp" 

Saat Anda menggunakan variabel $tmp di dalam fungsi myfunc, itu tidak mengubah nilai $tmp, yang berada di luar fungsi.

Meneruskan array sebagai parameter

Apa yang akan terjadi jika Anda meneruskan array sebagai parameter ke suatu fungsi:

#!/bin/bashmyfunc() { echo "Parameternya adalah:[email protected]" arr=$1 echo "Array yang diterima adalah ${arr[*]}"}my_arr=(5 10 15)echo "Array lama adalah:${my_arr[*]}"myfunc ${my_arr[*]}

Fungsi hanya mengambil nilai pertama dari variabel array.

Anda harus membongkar array menjadi nilai tunggal, lalu menggunakan nilai ini sebagai parameter fungsi. Terakhir, kemas ke dalam array dalam fungsi seperti ini:

#!/bin/bashmyfunc() { local new_arr new_arr=("[email protected]") echo "Nilai yang diperbarui adalah:${new_arr[*]}"}my_arr=(4 5 6)echo "Lama array adalah ${my_arr[*]}"myfunc ${my_arr[*]}

Variabel array dibangun kembali berkat fungsinya.

Fungsi rekursif

Fitur ini memungkinkan fungsi untuk memanggil dirinya sendiri dari dalam fungsi itu sendiri.

Contoh klasik dari fungsi rekursif adalah menghitung faktorial. Untuk menghitung faktorial dari 3, gunakan persamaan berikut:

3! =1 * 2 * 3

Sebagai gantinya, kita dapat menggunakan fungsi rekursif seperti ini:

x! =x * (x-1)!

Jadi untuk menulis fungsi faktorial menggunakan skrip bash, akan menjadi seperti ini:

#!/bin/bashfac_func() { if [ $1 -eq 1 ]; lalu echo 1 else local tmp=$(($1 - 1)) local res=$(fac_func $tmp) echo $(($res * $1)) fi}read -p "Masukkan nilai:" valres=$(fac_func $ val)echo "Faktorial dari $val adalah:$res"

Menggunakan fungsi bash rekursif sangat mudah!

Membuat perpustakaan

Sekarang kita tahu cara menulis fungsi dan cara memanggilnya, tetapi bagaimana jika Anda ingin menggunakan fungsi bash ini atau blok kode pada file skrip bash yang berbeda tanpa menyalin dan menempelkannya di file Anda.

Anda dapat membuat perpustakaan untuk fungsi Anda dan mengarahkan ke perpustakaan itu dari file apa pun yang Anda butuhkan.

Dengan menggunakan perintah sumber , Anda dapat menyematkan skrip file perpustakaan di dalam skrip shell Anda.

Perintah sumber memiliki alias, yaitu titik. Untuk sumber file dalam skrip shell, tulis baris berikut:

. ./myscript

Mari kita asumsikan bahwa kita memiliki file bernama myfuncs yang berisi berikut ini:

addnum() { echo $(($1 + $2 + $3 + $4))}

Sekarang, kita akan menggunakannya di file skrip bash lain seperti ini:

#!/bin/bash. ./myfuncsresult=$(tambahkan 10 10 5 5)echo "Total =$hasil"

Luar biasa!! Kami telah menggunakan fungsi bash di dalam file skrip bash kami; kita juga dapat menggunakannya di shell kita secara langsung.

Gunakan fungsi Bash dari baris perintah

Nah, itu mudah, jika Anda membaca posting sebelumnya, yaitu tentang sinyal dan pekerjaan, Anda akan memiliki ide tentang bagaimana sumber file fungsi kami di file bashrc, dan karenanya kami dapat menggunakan fungsi langsung dari bash shell . Keren

Edit file bashrc di /home/username dan tambahkan baris ini:

. /home/likegeeks/Desktop/myfuncs

Pastikan Anda mengetik jalur yang benar.

Sekarang fungsi tersebut tersedia untuk kita gunakan di baris perintah secara langsung:

$ addnum 10 20

Catatan:Anda mungkin perlu keluar dan masuk untuk menggunakan fungsi bash dari shell.

Catatan lain:jika Anda membuat nama fungsi Anda seperti perintah bawaan, Anda akan menimpa perintah default sehingga Anda harus menanganinya.

Saya harap Anda menyukai posnya. Terus kembali.

Terima kasih.


Linux
  1. Apakah Mungkin Membuat Dan Menggunakan Menu Di Vim (berbasis terminal)?

  2. Masalah Bash Scripting - Bandingkan Dua Daftar Dan Buat Yang Ketiga?

  3. Bash Seri Pemula #9:Menggunakan Fungsi di Bash

  1. Buat database baru dan gunakan di MySQL/MariaDB

  2. Di Bash, Kapan Alias ​​​​Kapan Skrip, Dan Kapan Menulis Fungsi?

  3. Kapan menggunakan Bash dan kapan menggunakan Perl/Python/Ruby?

  1. Fungsi Dalam Variabel Shell?

  2. Cara Membuat dan Memanggil Fungsi di Bash

  3. Ekspor variabel dari bash dan gunakan dengan Python