Memahami dan Menulis Fungsi dalam Skrip Shell - Bahagian VI
- 2552
- 209
- Ronnie Hermann
Fungsi memainkan peranan penting dalam mana -mana bahasa pengaturcaraan. Seperti banyak bahasa pengaturcaraan sebenar, Bash mempunyai fungsi yang digunakan dengan pelaksanaan terhad.
Memahami fungsi skrip shell linuxApa fungsi?
Dalam pengaturcaraan, fungsi dinamakan bahagian program yang melaksanakan tugas tertentu. Dalam pengertian ini, fungsi adalah jenis prosedur atau rutin. Apabila fungsi dipanggil program meninggalkan bahagian kod semasa dan mula melaksanakan baris pertama di dalam fungsi. Bila -bila masa terdapat kod berulang atau apabila tugas berulang, pertimbangkan untuk menggunakan fungsi sebaliknya.
Sebagai contoh, pertimbangkan kes di mana kita perlu mencari faktorial nombor di beberapa peringkat program tertentu. Daripada menulis keseluruhan kod (untuk mengira faktorial) setiap kali, kita boleh menulis bahagian kod yang mengira faktorial sekali di dalam blok dan menggunakan semula sama pada beberapa kesempatan.
Mengapa kita menulis fungsi?
- Ia membantu kita menggunakan semula kod.
- Meningkatkan kebolehbacaan program.
- Penggunaan pembolehubah yang cekap di dalam program.
- Membolehkan kami menguji bahagian program demi sebahagian.
- Memaparkan program sebagai sekumpulan sub-langkah.
Fungsi dalam skrip shell
Sintaks umum untuk menulis fungsi dalam skrip shell termasuk cara berikut.
fungsi func_name ... perintah ... atau func_name () ... perintah ... Membuka pendakap keriting juga boleh digunakan dalam baris kedua juga. func_name () ... perintah ...
Anda selalu bebas menulis arahan yang sah di dalam blok fungsi ini seperti yang kita lakukan biasanya dalam skrip shell. Sekarang mari kita cuba menulis satu skrip mudah dengan fungsi kecil di dalamnya.
#!/bin/bash call_echo () echo 'Ini adalah fungsi dalam' op = $ 1 jika [$# -ne 1]; kemudian echo "penggunaan: $ 0" lain jika [$ 1 = 0]; Kemudian echo 'ini adalah fungsi luar' elif [$ 1 = 1]; kemudian call_echo else echo 'argumen tidak sah' fi fi exit 0
Definisi fungsi mesti mendahului panggilan pertama kepadanya. Tidak ada yang seperti 'mengisytiharkan fungsi' sebelum memanggilnya. Dan kita sentiasa boleh bersarang fungsi di dalam fungsi.
Catatan:- Menulis fungsi kosong selalu menghasilkan kesilapan sintaks.
Apabila fungsi yang sama ditakrifkan beberapa kali, versi akhir adalah apa yang dipanggil. Mari ambil contoh.
#!/bin/bash func_same () echo 'definisi pertama' func_same () echo 'definisi kedua' func_same Exit 0
Fungsi mengambil parameter dan nilai kembali
Mari semakin mendalam dengan mempertimbangkan fungsi mengambil parameter dan nilai yang kembali. Untuk mengembalikan nilai dari fungsi, kami menggunakan shell 'kembali' terbina dalam. Sintaks adalah seperti berikut.
func_name () ... perintah ... kembali $ ret_val
Begitu juga kita boleh lulus hujah ke fungsi yang dipisahkan dengan ruang seperti yang diberikan di bawah.
func_name $ arg_1 $ arg_2 $ arg_3
Di dalam fungsi kita dapat mengakses hujah -hujah itu dengan urutan $ 1, $ 2, $ 3 dan sebagainya. Lihat skrip contoh berikut untuk mencari maksimum dua bilangan bulat menggunakan fungsi untuk menambah 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 "usage: $ 0" exit $ usg_err num_1 = $ 1 num_2 = $ 2 x if [$# -ne 2]; maka err_str elif ['expr $ num_1:' [0-9]*"-eq $ #num_1]; maka jika ['expr $ num_2:' [0-9]*"-eq $ #num_2] ; kemudian max_two $ num_1 $ num_2 else err_str fi else err_str fi exit 0
Di atas kelihatan seperti agak kompleks, tetapi mudah jika kita membaca garis. Pertama bersarang jika-lalai jika garis untuk tujuan pengesahan i.e., untuk memeriksa nombor dan jenis hujah dengan bantuan ekspresi biasa. Selepas itu kita memanggil fungsi dengan dua argumen baris arahan dan memaparkan hasilnya sendiri. Ini kerana kita tidak dapat mengembalikan bilangan bulat besar dari fungsi. Cara lain untuk mengatasi masalah ini adalah menggunakan pembolehubah global untuk menyimpan hasil dalam fungsi dalam. Skrip di bawah menerangkan kaedah ini.
#!/bin/bash usg_err = 7 ret_val = max_two () if ["$ 1" -eq "$ 2"]; kemudian echo 'sama' keluar 0 elif ["$ 1" -gt "$ 2"]; kemudian ret_val = $ 1 else ret_val = $ 2 fi err_str () echo "usage: $ 0" exit $ usg_err num_1 = $ 1 num_2 = $ 2 if [$# -ne 2]; maka err_str elif ['expr $ num_1:' [0-9]*"-eq $ #num_1]; maka jika ['expr $ num_2:' [0-9]*"-eq $ #num_2] ; kemudian max_two $ num_1 $ num_2 echo $ ret_val else err_str fi else err_str fi exit 0
Sekarang cuba beberapa masalah menarik yang dijelaskan dalam siri skrip shell sebelumnya menggunakan fungsi seperti berikut.
- Memahami tips bahasa skrip shell linux asas - Bahagian I
- 5 skrip shell untuk pemula linux untuk mempelajari pengaturcaraan shell - Bahagian II
- Berlayar Melalui Dunia Linux Bash Scripting - Bahagian III
- Aspek Matematik Pengaturcaraan Linux Shell - Bahagian IV
- Mengira ungkapan matematik dalam bahasa skrip shell - Bahagian V
Saya akan kembali dengan lebih banyak wawasan untuk ciri -ciri fungsional seperti menggunakan pembolehubah tempatan, rekursi dan lain -lain di bahagian seterusnya. Tetap dikemas kini dengan komen.
- « Zenity - mencipta kotak dialog grafik (GTK+) dalam skrip baris dan shell
- Multatail - Pantau pelbagai fail secara serentak di terminal Linux tunggal »