Android

Fungsi Bash

Bash vs Python для DevOps инженеров и системных администраторов

Bash vs Python для DevOps инженеров и системных администраторов

Isi kandungan:

Anonim

Fungsi Bash pada dasarnya adalah satu set arahan yang dapat dipanggil beberapa kali. Tujuan fungsi adalah untuk membantu anda membuat skrip bash anda lebih mudah dibaca dan untuk mengelakkan menulis kod yang sama berulang kali.

Berbanding dengan kebanyakan bahasa pengaturcaraan, fungsi Bash agak terbatas. Dalam tutorial ini, kami akan meliputi asas-asas fungsi Bash dan menunjukkan kepada anda cara menggunakannya dalam skrip shell anda.

Deklarasi Fungsi Bash

Sintaks untuk mengisytiharkan fungsi bash adalah sangat mudah. Mereka boleh diisytiharkan dalam dua format yang berbeza:

  1. Format pertama bermula dengan nama fungsi, diikuti dengan tanda kurung. Ini adalah format pilihan dan lebih digemari.

    function_name () { commands }

    Versi baris tunggal:

    function_name () { commands; }

    Format kedua bermula dengan function perkataan yang disimpan diikuti oleh nama fungsi.

    function function_name { commands }

    Versi baris tunggal:

    function function_name { commands; }

Beberapa perkara yang perlu diperhatikan:

  • Senarai arahan antara pendakap kerinting {} adalah badan fungsi. Kurungan keriting yang mengelilingi fungsi badan mesti dipisahkan dari tubuh dengan ruang atau baris baru. Memaksudkan fungsi tidak melaksanakannya. Untuk memanggil fungsi bash, gunakan nama fungsi sahaja. Perintah antara pendakap kerinting dilaksanakan apabila fungsi dipanggil dalam skrip shell. Definisi fungsi mesti diletakkan sebelum sebarang panggilan ke fungsi. Apabila menggunakan fungsi tunggal "dipadatkan", titik koma ; mesti mengikuti arahan terakhir dalam fungsi. Anda harus sentiasa cuba untuk mengekalkan nama fungsi anda sebagai deskriptif.

Untuk memahami perkara ini dengan lebih baik, lihat contoh berikut:

~ / hello_world.sh

#!/bin/bash hello_world () { echo 'hello, world' } hello_world

Mari kita analisa baris kod demi baris:

  • Dalam baris 3 kita menentukan fungsi dengan memberi nama, dan membuka brace brace { yang menandakan permulaan badan fungsi.Line 4 adalah badan fungsi. Fungsi badan boleh mengandungi berbilang arahan dan pengisytiharan yang berubah- hello_world 5 , pendakap kerinting penutup } , mentakrifkan akhir fungsi hello_world baris 7 kita melaksanakan fungsi tersebut. Anda boleh melaksanakan fungsi seberapa banyak yang anda perlukan.

Jika anda menjalankan skrip, ia akan mencetak hello, world .

Skop Pembolehubah

Pembolehubah global adalah pembolehubah yang boleh diakses dari mana saja dalam skrip tanpa mengira ruang lingkup. Dalam Bash, semua pemboleh ubah secara lalai didefinisikan sebagai global, walaupun dinyatakan dalam fungsi.

Pembolehubah tempatan boleh diisytiharkan dalam badan fungsi dengan kata kunci local dan hanya boleh digunakan di dalam fungsi tersebut. Anda boleh mempunyai pembolehubah setempat dengan nama yang sama dalam fungsi yang berbeza.

Untuk lebih menggambarkan bagaimana skop pembolehubah berfungsi di Bash, mari kita pertimbangkan contoh:

~ / variables_scope.sh

#!/bin/bash var1='A' var2='B' my_function () { local var1='C' var2='D' echo "Inside function: var1: $var1, var2: $var2" } echo "Before executing function: var1: $var1, var2: $var2" my_function echo "After executing function: var1: $var1, var2: $var2"

Skrip bermula dengan mendefinisikan dua pembolehubah global var1 dan var2 . Kemudian fungsi yang menetapkan pembolehubah tempatan var1 dan mengubah suai var2 variabel global.

Before executing function: var1: A, var2: B Inside function: var1: C, var2: D After executing function: var1: A, var2: D

Dari output di atas, kita dapat menyimpulkan bahawa:

  • Jika anda menetapkan pembolehubah setempat di dalam badan fungsi dengan nama yang sama dengan pembolehubah global yang sedia ada, ia akan mempunyai keutamaan di atas pembolehubah global. Pemboleh ubah global boleh ditukar dari dalam fungsi.

Pulangan Nilai

Tidak seperti fungsi dalam bahasa pengaturcaraan "sebenar", fungsi Bash tidak membolehkan anda mengembalikan nilai apabila dipanggil. Apabila fungsi bash selesai, nilai pulangannya ialah status kenyataan terakhir yang dilaksanakan dalam fungsi, 0 untuk nombor perpuluhan yang berjaya dan tidak sifar dalam julat 1 - 255 untuk kegagalan.

Status pulangan boleh ditentukan dengan menggunakan kata kunci return , dan ia ditugaskan kepada variabel $? . Kenyataan return menamatkan fungsi. Anda boleh memikirkannya sebagai status keluar fungsi.

~ / return_values.sh

#!/bin/bash my_function () { echo "some result" return 55 } my_function echo $?

some result 55

Untuk benar-benar mengembalikan nilai sewenang-wenang dari fungsi, kita perlu menggunakan kaedah lain. Pilihan yang paling mudah adalah untuk memberikan hasil fungsi kepada pembolehubah global:

~ / return_values.sh

#!/bin/bash my_function () { func_result="some result" } my_function echo $func_result

some result

Satu lagi, pilihan yang lebih baik untuk mengembalikan nilai dari fungsi adalah untuk menghantar nilai ke stdout menggunakan echo atau printf seperti ditunjukkan di bawah:

~ / return_values.sh

#!/bin/bash my_function () { local func_result="some result" echo "$func_result" } func_result="$(my_function)" echo $func_result

some result

Daripada melaksanakan fungsi yang akan mencetak mesej tersebut kepada stdout, kami memberikan output fungsi kepada pemboleh ubah func_result menggunakan penggantian perintah $() . Pemboleh ubah ini kemudiannya boleh digunakan seperti yang diperlukan.

Meluluskan Argumen untuk Fungsi Bash

Untuk lulus apa-apa bilangan hujah kepada fungsi bash hanya meletakkannya selepas nama fungsi, dipisahkan oleh ruang. Adalah satu amalan yang baik untuk mengutip hujah-hujah untuk mengelakkan kesilapan hujah dengan ruang di dalamnya.

  • Parameter lulus adalah $1 , $2 , $3 $n , sepadan dengan kedudukan parameter selepas nama fungsi. Pembolehubah $0 dikhaskan untuk nama fungsi itu. Variabel $# memegang bilangan parameter / argumen kedudukan yang dihantar kepada fungsi. $* dan $@ pembolehubah memegang semua parameter / argumen kedudukan yang diluluskan kepada fungsi.
    • "$*" Mengembang ke rentetan tunggal yang dipisahkan oleh ruang (aksara pertama IFS) - "$1 $2 $n" . Apabila double disebutkan, "$@" mengembang untuk menyisikan rentetan - "$1" "$2" "$n" . Apabila tidak disebut dua kali, $* dan $@ adalah sama.

Inilah contohnya:

~ / passing_arguments.sh

#!/bin/bash greeting () { echo "Hello $1" } greeting "Joe"

Hello Joe

Kesimpulannya

Fungsi Bash adalah blok kod boleh diguna semula yang direka untuk melaksanakan operasi tertentu. Setelah ditakrifkan, fungsi boleh dipanggil beberapa kali dalam skrip.

Anda juga mungkin mahu membaca tentang cara menggunakan fungsi Bash untuk membuat perintah pintasan yang tidak dapat dilupakan untuk arahan yang lebih lama.

terminal bash