Fungsi pemahaman dan penulisan dalam skrip shell - Bagian VI

Fungsi pemahaman dan penulisan dalam skrip shell - Bagian VI

Fungsi memainkan peran penting dalam bahasa pemrograman apa pun. Seperti banyak bahasa pemrograman nyata, Bash memiliki fungsi yang digunakan dengan implementasi terbatas.

Memahami fungsi skrip shell linux

Apa fungsi?

Dalam pemrograman, fungsi dinamai bagian dari program yang melakukan tugas tertentu. Dalam hal ini, fungsi adalah jenis prosedur atau rutin. Ketika suatu fungsi disebut program meninggalkan bagian kode saat ini dan mulai menjalankan baris pertama di dalam fungsi. Setiap kali ada kode berulang atau ketika tugas berulang, pertimbangkan untuk menggunakan fungsi sebagai gantinya.

Misalnya, pertimbangkan kasus di mana kita perlu menemukan faktorial angka pada beberapa tahap program tertentu. Alih -alih menulis seluruh kode (untuk menghitung faktorial) setiap saat, kita dapat menulis bagian kode yang menghitung faktorial sekali di dalam blok dan menggunakan kembali pada beberapa kesempatan.

Mengapa kami menulis fungsi?

  1. Ini membantu kita menggunakan kembali kode.
  2. Tingkatkan keterbacaan program.
  3. Penggunaan variabel yang efisien di dalam program.
  4. Memungkinkan kami untuk menguji bagian program demi bagian.
  5. Menampilkan program sebagai sekelompok sub-langkah.
Fungsi dalam skrip shell

Sintaks umum untuk fungsi penulisan dalam skrip shell mencakup cara -cara berikut.

fungsi func_name ... perintah ... atau func_name () ... perintah ... pembukaan kawat gigi keriting juga dapat digunakan di baris kedua juga. func_name () ... perintah ...

Anda selalu bebas menulis perintah yang valid di dalam blok fungsi ini seperti yang kami lakukan secara normal dalam skrip shell. Sekarang mari kita coba tulis satu skrip sederhana dengan fungsi kecil di dalamnya.

#!/bin/bash call_echo () echo 'Ini fungsi di dalam' op = $ 1 if [$# -ne 1]; lalu echo "penggunaan: $ 0" lain jika [$ 1 = 0]; Kemudian gema 'Ini fungsi luar' elif [$ 1 = 1]; lalu call_echo else echo 'argumen tidak valid' fi fi keluar 0

Definisi fungsi harus mendahului panggilan pertama untuk itu. Tidak ada yang 'mendeklarasikan fungsi' sebelum menyebutnya. Dan kami selalu dapat menyarangkan fungsi di dalam fungsi.

Catatan:- Menulis fungsi kosong selalu menghasilkan kesalahan sintaksis.

Ketika fungsi yang sama didefinisikan beberapa kali, versi final adalah apa yang dipanggil. Mari kita ambil contoh.

#!/bin/bash func_same () echo 'definisi pertama' func_same () echo 'definisi kedua' func_same keluar 0
Fungsi mengambil parameter dan nilai pengembalian

Mari kita semakin dalam dengan mempertimbangkan fungsi mengambil parameter dan nilai mengembalikan. Untuk mengembalikan nilai dari suatu fungsi, kami menggunakan shell 'return' shell built-in. Sintaks adalah sebagai berikut.

func_name () ... perintah ... return $ ret_val

Demikian pula kita dapat meneruskan argumen ke fungsi yang dipisahkan dengan spasi seperti yang diberikan di bawah ini.

func_name $ arg_1 $ arg_2 $ arg_3

Di dalam fungsi kami dapat mengakses argumen secara berurutan sebagai $ 1, $ 2, $ 3 dan seterusnya. Lihatlah skrip contoh berikut untuk menemukan maksimum dua bilangan bulat menggunakan fungsi untuk menambahkan lebih banyak kejelasan.

#!/bin/bash usg_err = 7 max_two () if ["$ 1" -eq "$ 2"]; Kemudian echo 'sama' keluar 0 elif ["$ 1" -gt "$ 2"]; Kemudian echo $ 1 else echo $ 2 fi err_str () echo "penggunaan: $ 0" keluar $ usg_err num_1 = $ 1 num_2 = $ 2 x if [$# -ne 2]; Kemudian err_str eLif ['expr $ num_1:' [0-9]*"-eq $ #num_1]; lalu jika ['expr $ num_2:' [0-9]*"-eq $ #num_2] ; lalu max_two $ num_1 $ num_2 elstre err_str fi elstr_str fi keluar 0

Di atas terlihat seperti agak kompleks, tapi sederhana jika kita membaca garis. First Nested IF-Else If Lines untuk Tujuan Validasi i.e., Untuk memeriksa nomor dan jenis argumen dengan bantuan ekspresi reguler. Setelah itu kami memanggil fungsi dengan dua argumen baris perintah dan menampilkan hasil di sana sendiri. Ini karena kita tidak dapat mengembalikan bilangan bulat besar dari suatu fungsi. Cara lain untuk mengatasi masalah ini adalah dengan menggunakan variabel global untuk menyimpan hasil di dalam fungsi. Skrip di bawah ini menjelaskan metode ini.

#!/bin/bash usg_err = 7 ret_val = max_two () if ["$ 1" -eq "$ 2"]; Kemudian echo 'sama' keluar 0 elif ["$ 1" -gt "$ 2"]; maka ret_val = $ 1 else ret_val = $ 2 fi err_str () echo "penggunaan: $ 0" keluar $ usg_err num_1 = $ 1 num_2 = $ 2 jika [$# -ne 2]; Kemudian err_str eLif ['expr $ num_1:' [0-9]*"-eq $ #num_1]; lalu jika ['expr $ num_2:' [0-9]*"-eq $ #num_2] ; lalu max_two $ num_1 $ num_2 echo $ ret_val elstr_str fi elstr_str fi keluar 0

Sekarang coba beberapa masalah menarik yang dijelaskan dalam seri scripting shell sebelumnya menggunakan fungsi sebagai berikut.

  1. Pahami tips bahasa skrip shell linux dasar - Bagian i
  2. 5 Script Shell untuk Pemula Linux Untuk Mempelajari Pemrograman Shell - Bagian II
  3. Berlayar melalui dunia skrip Linux Bash - Bagian III
  4. Aspek Matematika Pemrograman Shell Linux - Bagian IV
  5. Menghitung Ekspresi Matematika dalam Bahasa Scripting Shell - Bagian V

Saya akan kembali dengan lebih banyak wawasan untuk fitur fungsional seperti menggunakan variabel lokal, rekursi dll di bagian selanjutnya. Tetap diperbarui dengan komentar.