GNU/Linux >> Belajar Linux >  >> Linux

Shell Scripting Bagian V:Fungsi di Bash

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:

  1. Sintaks 1:
    nama_fungsi fungsi
    {
        ##### kumpulan perintah
    }
  2. 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.


Linux
  1. Menyesuaikan shell Bash

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

  3. Cara Membuat dan Memanggil Fungsi di Bash

  1. Skrip bash(I)

  2. Fungsi Dalam Variabel Shell?

  3. Dapatkan daftar nama fungsi dalam skrip shell

  1. Tutorial Pemrograman Linux C Bagian 18:Fungsi rekursif

  2. Bagaimana Membandingkan String di Bash Shell Scripting

  3. Cara menggunakan fungsi shell baris perintah di Linux