Hai! Selamat datang di seri tutorial skrip shell HowToForge. Jika Anda ingin membaca rilis tutorial sebelumnya, silakan klik di sini untuk tutorial part1, part2, part3 dan part4. Di bagian ini, Anda akan belajar bagaimana menyusun skrip Anda secara efisien dengan membuat fungsi. Di akhir tutorial ini, Anda akan dapat mengetahui cara membuat fungsi di Linux Bash Shell, meneruskan parameter ke fungsi Anda, dan mengembalikan beberapa nilai dari suatu fungsi ke kode utama Anda. Mari kita mulai!
Pengantar
Fungsi, juga dikenal sebagai subrutin dalam bahasa pemrograman adalah sekumpulan instruksi yang melakukan tugas tertentu untuk rutinitas utama [1]. Ini memungkinkan pemrogram untuk memecahkan kode yang rumit dan panjang menjadi bagian-bagian kecil yang dapat dipanggil kapan pun diperlukan. Setiap fungsi perlu dipanggil oleh rutinitas utama agar dapat berjalan, dengan demikian, fungsi tersebut diisolasi dengan bagian lain dari kode Anda dan ini menciptakan cara pengujian kode yang mudah. Selain itu, fungsi dapat dipanggil kapan saja dan berulang kali, ini memungkinkan Anda menggunakan kembali, mengoptimalkan, dan meminimalkan kode Anda. Seperti kebanyakan bahasa pemrograman, bash shell juga mendukung fungsi.
Sintaks Umum:
- Sintaks 1:
nama_fungsi fungsi
{
##### kumpulan perintah
} - Sintaks 2:
function_name()
{
#### kumpulan perintah
}
Membuat Fungsi
Bash mendukung dua struktur untuk fungsi. Dalam menggunakan sintaks pertama, Anda harus menggunakan fungsi kata kunci, diikuti dengan nama fungsi Anda dan tanda kurung buka dan tutup dan kurung kurawal untuk memisahkan isi fungsi Anda dengan rutinitas utama Anda. Anda akan menemukan sintaks ini familier jika Anda memiliki latar belakang PHP karena fungsi dalam PHP dideklarasikan dengan cara yang sama. Sintaks lainnya hanya terdiri dari nama fungsi, kurung buka dan tutup, dan kurung kurawal.
#!/bin/bash
myfunction(){
echo "Fungsi saya berfungsi!"
}
fungsi saya
Saya telah menggunakan sintaks kedua dalam contoh kita. Setelah membuat fungsi myfunction, itu kemudian dipanggil dengan memanggil nama fungsinya ke rutinitas utama kami. Rutinitas utama akan berada di mana saja dalam skrip kita yang tidak didefinisikan sebagai bagian dari fungsi kita.
Sekarang mari kita atur ulang kode kita untuk menguji apakah fungsi dapat dideklarasikan di mana saja dalam skrip kita. Perhatikan kode di bawah ini:
#!/bin/bash
echo "menguji fungsi saya"
fungsi saya
fungsi saya(){
echo "Fungsi saya berfungsi!"
Baris 3 dalam kode di atas mengembalikan kesalahan perintah tidak ditemukan. Ini hanya berarti bahwa:
Fungsi ini hanya berfungsi jika dideklarasikan sebelum rutinitas utama Anda. Penerjemah akan mengembalikan kesalahan jika Anda telah mendeklarasikan fungsi Anda setelah rutinitas utama Anda.Restrukturisasi kode menggunakan fungsi
Salah satu fitur terbaik dari fungsi adalah dapat menggunakan kembali kode. Ketika suatu prosedur membutuhkan perintah yang berulang kali dieksekusi tetapi tidak dapat disusun menggunakan pernyataan perulangan, maka fungsi dapat menjadi solusi.
Misalnya, perhatikan kode di bawah ini:
#!/bin/bash
sementara(true)
lakukan
hapus
printf "Pilih dari operasi berikut:\n"
printf "[a ]penjumlahan\n[b]Pengurangan\n[c]Perkalian\n[d]Pembagian\n"
printf "#################### ###########\n"
read -p "Pilihan Anda:" choice
case $choice in
[aA])
baca -p "Masukkan bilangan bulat pertama:" int1
read -p "Masukkan bilangan bulat kedua:" int2
res=$((int1+int2))
;;
[ bB])
read -p "Masukkan bilangan bulat pertama:" int1
baca -p "Masukkan bilangan bulat kedua:" int2
res=$((int1-int2))
;;
[cC])
read -p "Enter first integer:" int1
read -p "Enter second integer:" int2
res=$(( int1*int2))
;;
[dD])
read -p "Masukkan bilangan bulat pertama:" int1
baca -p "Masukkan bilangan bulat kedua:" int2
res=$((int1/int2))
;;
*)
res=0
echo "pilihan salah!"
esac
echo "Hasilnya adalah:" $res
read -p "Apakah Anda ingin melanjutkan? [y]es or [n]o:" ans
jika [ $ans =='n' ]
lalu
echo "Keluar dari skrip. Semoga harimu menyenangkan!"
istirahat
lainnya
lanjutkan
fi
selesai
Skrip berjalan dengan baik, namun, perhatikan bahwa baris untuk menerima input berulang kali dilakukan di setiap pola dalam pernyataan sakelar kami.
#!/bin/bash
inputs(){
read -p "Masukkan bilangan bulat pertama:" int1
read -p "Masukkan bilangan bulat kedua:" int2
}
exitPrompt(){
read -p "Apakah Anda ingin melanjutkan? [y]es atau [n]o:" ans
if [ $ans =='n ' ]
lalu
echo "Keluar dari skrip. Semoga harimu menyenangkan!"
istirahat
lainnya
lanjutkan
fi
}
sementara(true)
lakukan
hapus
printf "Pilih dari operasi berikut:\n"
printf "[a]Penambahan\n[b] Pengurangan\n[c]Perkalian\n[d]Pembagian\n"
printf "####################################### ####\n"
read -p "Your choice:" choice
case $choice in
[aA])
input
res =$((int1+int2))
;;
[bB])
masukan
res=$((int1-int2))
;;
[cC])
input
res=$((int1*int2))
;;
[dD] )
masukan
res=$((int1/int2))
;;
*)
res=0
menggemakan "pilihan yang salah!"
esac
echo "Hasilnya adalah:" $res
exitPrompt
selesai
Kami meningkatkan kode kami dengan membuat input subbagian dan exitPrompt. Ini bekerja persis sama dengan kode kami sebelumnya, namun, kode kami saat ini lebih mudah untuk memecahkan masalah karena terstruktur dengan benar.
Meneruskan parameter pada fungsi
Seperti kebanyakan bahasa pemrograman, Anda dapat melewatkan parameter dan memproses data tersebut dalam fungsi di bash. Kode di bawah ini menunjukkan prosedur tentang cara meneruskan nilai dalam skrip shell:
#!/bin/bash
myfunction(){
echo $1
echo $2
}
myfunction "Halo" "Dunia"
Perhatikan dalam contoh kami, kami menambahkan nilai "Halo" dan "Dunia" setelah kami memanggil fungsi saya. Nilai-nilai tersebut diteruskan ke myfunction sebagai parameter dan disimpan dalam variabel lokal. Namun, tidak seperti bahasa lain, interpreter menyimpan nilai yang diteruskan ke dalam variabel yang telah ditentukan sebelumnya, yang dinamai menurut urutan penerusan parameter, 1 sebagai nama awal hingga urutan penerusan. Perhatikan bahwa kata "Halo" disimpan ke variabel 1 dan nilai "Dunia" disimpan di variabel 2.
Catatan:Angka 1 dan 2 dalam contoh kita adalah variabel lokal dan dengan demikian, tidak dapat diakses oleh bagian lain dari skrip selain dari fungsi tempat parameter diteruskan.
Misalnya,
#!/bin/bash
myfunction(){
echo $1
echo $2
}
myfunction "Halo" "Dunia"
gema $1
gema $2
echo $1 dan echo $2 di dua baris terakhir skrip kita tidak memiliki tampilan karena interpreter tidak mengenali kedua variabel karena keduanya lokal ke myfunction.
Mengembalikan Nilai dari Fungsi
Selain membuat fungsi dan meneruskan parameter ke dalamnya, fungsi bash dapat meneruskan nilai variabel lokal suatu fungsi ke rutinitas utama dengan menggunakan kata kunci return. Nilai yang dikembalikan kemudian disimpan ke variabel default $? Misalnya, perhatikan kode berikut:
#!/bin/bash
add(){
sum=$(($1+$2))
return $sum
}
read -p "Masukkan bilangan bulat:" int1
read -p "Masukkan bilangan bulat:" int2
add $int1 $int2
echo "Hasilnya adalah:" $?
Dalam contoh, kami meneruskan parameter int1 dan int2 ke fungsi add. Selanjutnya fungsi add memprosesnya melalui baris sum=$(($1+$2)). Kemudian nilai variabel sum diteruskan ke rutinitas utama melalui baris return $sum. Secara default, nilai $sum akan disimpan ke variabel default $? Akhirnya, baris echo "Hasilnya adalah:" $? mencetak hasilnya.
Catatan:Skrip shell hanya dapat mengembalikan satu nilai.Tidak seperti bahasa pemrograman lain, skrip shell tidak dapat mengembalikan beberapa nilai dari suatu fungsi. Mari kita lihat contoh ini:
#!/bin/bash
add(){
sum=$(($1+$2))
dif=$(($1-$2))
kembali $sum
}
read -p "Masukkan bilangan bulat:" int1
read -p "Masukkan bilangan bulat:" int2
tambahkan $int1 $int2
echo "Hasilnya adalah:" $?
echo "Hasilnya adalah:" $?
Singkatnya
Mari kita lihat contoh lain yang menggunakan fungsi, meneruskan parameter ke sana, dan mengembalikan nilai.
#!/bin/bash
####################
#Penulis:HowtoForge #
### ##################
clear(){
clear
}
bin( ){
bin1=$(echo "obase=2;$1"|bc)
echo $bin1
}
dec(){
dec1 =$(echo "ibase=2;$1"|bc)
kembalikan $dec1
}
########Utama####### ##
printf "Pilih dari operasi berikut:\n[1]Konversi Desimal ke Biner\n"
printf "[2]Konversi Biner ke Desimal\n"
baca -p " Pilihan Anda:" op
case $op in
1)
read -p "Enter integer number:" int
bin $int
;;
2)
read -p "Masukkan bilangan biner:" int
dec $int
echo "Persamaan desimal dari $int adalah $?"
;;
*)
echo "Pilihan Salah!"
esac
Contoh yang diberikan mengonversi input yang diberikan ke nilai biner atau desimal menggunakan perintah obase dan ibase. Baris $(echo "obase=2;$1"|bc) mengonversi nilai desimal yang diberikan ke digit biner dan menyimpannya ke variabel bin1. Selanjutnya kita tampilkan nilai $bin1 dengan menggunakan perintah echo.
Catatan:Lebih baik menggunakan echo secara langsung saat mengonversi dari desimal ke biner karena ketika Anda mengembalikan perintah untuk meneruskan nilai biner, bash mengubah nilai biner menjadi desimal sebelum mengembalikannya.Selain itu, kami telah mengonversi nilai biner ke desimal menggunakan perintah $(echo "ibase=2;$1"|bc).
Anda juga harus ingat bahwa interpreter hanya mampu menerima digit biner 8-bit. Anda akan memasukkan digit yang melebihi batas 8-bit, itu akan menghasilkan overflow dan bit digit yang paling signifikan akan dibuang.
Digit biner 10-bit 1000001010 mengembalikan 10 karena mengikuti aturan 8-bit, 2 bit yang tersisa di sisi kanan (bit paling signifikan) akan dihilangkan, dengan demikian, 1000001010 akan menjadi sama dengan 00001010 yang sama dengan 10. Jika Anda ingin operasi yang menerima digit biner melebihi 8-bit maka Anda harus membuat kode secara manual.
Kesimpulan
Bash memiliki fungsi yang sangat mirip dengan bahasa pemrograman untuk menyediakan banyak alat kepada pengguna dan membuat sistem Linux lebih kuat. Dalam seri ini, Anda telah meningkatkan pengetahuan Anda tentang skrip shell melalui fungsi. Fungsi dalam skrip shell untuk memberikan modularitas kepada pengguna, membuat skrip lebih mudah untuk memecahkan masalah dan memungkinkan penggunaan kembali kode.
Cara Menginstal versi OpenSSL terbaru dari Sumber di Linux Cara Menambahkan Penyimpanan Eksternal ke ownCloud 9Linux