Fungsi bash shell adalah cara untuk mengelompokkan beberapa perintah UNIX/Linux untuk eksekusi selanjutnya menggunakan satu nama untuk grup . Fungsi bash shell dapat dijalankan seperti perintah Unix biasa. Fungsi shell dijalankan dalam konteks shell saat ini tanpa membuat proses baru untuk menafsirkannya.
Baik alias bash maupun fungsi memungkinkan Anda untuk menentukan pintasan untuk perintah yang lebih panjang atau lebih rumit. Namun, alias tidak mengizinkan aliran kontrol, argumen, dan hal-hal tipuan lainnya yang diizinkan oleh fungsi ini seperti yang dijelaskan dalam tutorial ini.
Artikel ini adalah bagian dari seri tutorial bash yang sedang berlangsung. Lihat tutorial kami sebelumnya tentang pengenalan bash, status keberadaan bash dan contoh alias bash.
Sintaks untuk membuat fungsi bash:
function functionname() { commands . . }
- fungsi adalah kata kunci yang opsional.
- nama fungsi adalah nama fungsinya
- perintah – Daftar perintah yang akan dieksekusi dalam fungsi.
Fungsi menerima argumen. Selama eksekusi, argumen ke fungsi menjadi parameter posisi. Parameter posisi 0 akan memiliki nama skrip yang tetap tidak berubah.
Anda dapat memanggil fungsi bash dari baris perintah seperti yang ditunjukkan di bawah ini:
$ functionname arg1 arg2
- Saat shell menginterpretasikan perintah Linux, pertama-tama shell akan melihat ke dalam fungsi built-in khusus seperti break, continue, eval, exec dll., kemudian mencari fungsi shell.
- Status keluar dari fungsi bash adalah status keluar dari perintah terakhir yang dijalankan di badan fungsi.
Catatan: Tempatkan definisi fungsi shell dalam file start up shell (misalnya, .bash_profile ). Dengan cara ini, fungsi shell selalu tersedia untuk Anda dari baris perintah. Lihat artikel urutan eksekusi bash kami sebelumnya untuk mengidentifikasi kapan .bash_profile akan dieksekusi.
Contoh 1:Berfungsi untuk menampilkan daftar panjang file dengan ekstensi yang diberikan
Fungsi "lsext" digunakan untuk menemukan daftar file di direktori saat ini, yang memiliki ekstensi yang diberikan seperti yang ditunjukkan di bawah ini. Fungsi ini menggunakan kombinasi perintah find dan perintah ls untuk menyelesaikan pekerjaan.
$ function lsext() { find . -type f -iname '*.'${1}'' -exec ls -l {} \; ; } $ cd ~ $ lsext txt -rw-r--r-- 1 root root 24 Dec 15 14:00 InMorning.txt -rw-r--r-- 1 root root 184 Dec 16 11:45 Changes16.txt -rw-r--r-- 1 root root 458 Dec 18 11:04 Changes18.txt -rw-r--r-- 1 root root 1821 Feb 4 15:01 ChangesOfDB.txt
Contoh 2. Fungsi Bash untuk mengeksekusi perintah Linux yang diberikan pada sekelompok file
Dalam contoh berikut, fungsi “batchexec” menemukan file dengan ekstensi yang diberikan dan menjalankan perintah yang diberikan pada file yang dipilih tersebut.
$ function batchexec() { find . -type f -iname '*.'${1}'' -exec ${@:2} {} \; ; } $ cd ~ $ batchexec sh ls $ batchexec sh chmod 755 $ ls -l *.sh -rwxr-xr-x 1 root root 144 Mar 9 14:39 debug.sh -rwxr-xr-x 1 root root 5431 Jan 25 11:32 get_opc_vers.sh -rwxr-xr-x 1 root root 22 Mar 18 08:32 t.sh
Dalam contoh di atas, ia menemukan semua file skrip shell dengan ekstensi .sh, dan mengubah izinnya menjadi 755. (Semua izin untuk pengguna, untuk grup, dan izin lainnya untuk membaca dan menjalankan). Dalam definisi fungsi, Anda dapat melihat “${@:2}” yang memberikan parameter posisi kedua dan berikutnya (fitur ekspansi shell).
Contoh 3. Fungsi Bash untuk menghasilkan kata sandi acak
Fungsi berikut digunakan untuk menghasilkan kata sandi kuat acak dengan karakter khusus untuk panjang yang diberikan. Jika panjang tidak diberikan secara default, ini menghasilkan panjang 12 karakter.
$ function rpass() { cat /dev/urandom | tr -cd '[:graph:]' | head -c ${1:-12} } $ rpass 6 -Ju.T[[ $ rpass Gz1f!aKN^""k
Dalam contoh di atas, ketika rpass dieksekusi dengan argumen 6, itu menghasilkan kata sandi acak dengan 6 karakter dan rpass tanpa argumen menghasilkan kata sandi dengan panjang 12 karakter. ${1:-12} berarti jika $1 tidak disetel atau null 12 akan dikembalikan jika tidak, nilai $1 akan diganti.
Contoh 4. Fungsi Bash untuk mendapatkan alamat IP dari antarmuka yang diberikan
Contoh berikut mendefinisikan fungsi yang disebut 'getip' yang menerima nama antarmuka sebagai argumen, dan memberikan alamat IP yang ditetapkan pada antarmuka yang diberikan di mesin. ( secara default ia mengembalikan alamat ip eth0 ). Ini menggunakan perintah ifconfig untuk mendapatkan alamat ip.
$ function getip() { /sbin/ifconfig ${1:-eth0} | awk '/inet addr/ {print $2}' | awk -F: '{print $2}'; } $ getip 15.110.106.86 $ getip eth0 15.110.106.86 $ getip lo 127.0.0.1
Contoh 5. Bash berfungsi untuk mencetak detail mesin
Contoh ini mendefinisikan fungsi yang memberikan semua informasi yang diperlukan tentang mesin. Pengguna dapat menentukan dan memanggil fungsi ini di file start up, sehingga Anda akan mendapatkan informasi ini selama startup.
$ function mach() { echo -e "\nMachine information:" ; uname -a echo -e "\nUsers logged on:" ; w -h echo -e "\nCurrent date :" ; date echo -e "\nMachine status :" ; uptime echo -e "\nMemory status :" ; free echo -e "\nFilesystem status :"; df -h } $ mach Machine information: Linux dev-db 2.6.18-128.el5 #1 SMP Wed Dec 17 11:41:38 EST 2008 x86_64 GNU/Linux Users logged on: root pts/2 ptal.mot Wed10 0.00s 1.35s 0.01s w -h Current date : Thu Mar 18 11:59:36 CET 2010 Machine status : 11:59:36 up 7 days, 3 min, 1 user, load average: 0.01, 0.15, 0.15 Memory status : total used free shared buffers cached Mem: 2059768 2033212 26556 0 81912 797560 -/+ buffers/cache: 1153740 906028 Swap: 4192956 48164 4144792 Filesystem status : Filesystem Size Used Avail Use% Mounted on /dev/sda1 12G 12G 0 100% / tmpfs 1006M 377M 629M 38% /dev/shm /dev/sdc5 9.9G 409M 9.0G 5% /mydisk
Contoh 6:Fungsi Bash untuk memformat output ls lebih baik
Fungsi berikut akan menghapus layar, menempatkan kursor di bagian atas layar, menjalankan ls, dan kemudian menempatkan kursor di akhir layar.
$ function ll () { clear; tput cup 0 0; ls --color=auto -F --color=always -lhFrt; tput cup 40 0; } $ ll
Tampilkan kode fungsi menggunakan perintah ketik
type adalah shell built-in yang digunakan untuk melihat kode fungsi.
Syntax: type function-name
$ type ll ll is a function ll () { clear; tput cup 0 0; ls --color=auto -F --color=always -lhFrt; tput cup 40 0; alias ls="ls --color=auto -F" }
Untuk referensi mudah Anda, dapatkan semua 6 fungsi yang disebutkan artikel ini dari contoh file fungsi .bash_profile ini.
Tambahkan semua fungsi ini ke file ~/.bash_profile Anda, untuk memastikan Anda memiliki akses ke fungsi ini setiap saat tanpa harus membuatnya setiap saat.