Cara menggunakan getopts untuk menguraikan opsi skrip

Cara menggunakan getopts untuk menguraikan opsi skrip

Objektif

Pelajari Cara Menggunakan Bash Getopts dibangun untuk mengurai opsi skrip

Sistem Operasi dan Versi Perangkat Lunak

  • Sistem operasi: - Semua distribusi Linux

Persyaratan

  • Tidak ada persyaratan khusus, cukup akses ke shell bash

Kesulitan

SEDANG

Konvensi

  • # - mensyaratkan perintah linux yang diberikan untuk dieksekusi dengan hak istimewa root
    langsung sebagai pengguna root atau dengan menggunakan sudo memerintah
  • $ - mensyaratkan perintah Linux yang diberikan untuk dieksekusi sebagai pengguna biasa

Perkenalan

Memodifikasi perilaku skrip bash melalui opsi runtime, seperti yang biasanya kita lakukan dengan program baris perintah, bisa sangat berguna. Shell bash menyediakan Getopts perintah builtin, cara standar untuk mencapai ini. Bagaimana menggunakannya adalah apa yang akan kita pelajari dalam tutorial ini.

Membuat skrip tes kami

Untuk tujuan tutorial ini, kita akan membuat skrip tes, dan, dengan banyak fantasi, kita akan menyebutnya tes.SH. Tujuan dari skrip ini adalah untuk menghasilkan sesuatu tergantung pada opsi yang akan kami berikan (itu tidak akan menjadi skrip yang paling berguna di dunia tetapi akan cukup untuk menjelaskan bagaimana hal -hal bekerja).

Mari Buka Editor Teks Kita dan Mulailah:

#!/Bin/Bash Set -e Set -u Set -o Pipefail 

Opsi shell yang disediakan di awal skrip tidak wajib, tetapi merupakan kebiasaan yang baik untuk menggunakannya di setiap skrip yang kami tulis. Secara singkat, -e, kependekan dari Errexitmemodifikasi perilaku shell yang akan keluar setiap kali perintah keluar dengan status non nol (dengan beberapa pengecualian). -u adalah pilihan lain yang sangat penting: ini membuat shell untuk memperlakukan variabel yang tidak ditentukan sebagai kesalahan.

Akhirnya Pipefail mengubah cara perintah di dalam pipa dievaluasi. Status keluar dari pipa adalah perintah paling kanan untuk keluar dengan status non nol, atau nol jika semua program dalam pipa dijalankan dengan sukses. Dengan kata lain, pipa akan dianggap berhasil jika semua perintah yang terlibat dijalankan tanpa kesalahan.



Konstruksi getopts

Setelah penyimpangan singkat ini, mari kita kembali ke poin utama tutorial ini dan mari kita lihat caranya Getopts Pekerjaan:

#!/Bin/Bash Set -e Set -u Set -o Pipefail Sementara Getopts 'LHA:' Opsi; lakukan kasus "$ opsi" di l) gema "linuxconfig" ;; h) echo "h adalah singkatan dari h" ;; a) avalue = "$ opTarg" gema "Nilai yang diberikan adalah $ OptArg" ;; ?) echo "Penggunaan skrip: $ (Basename \ $ 0) [-l] [-h] [-a SomeValue]"> & 2 keluar 1 ;; ESAC Done Shift "$ (($ optind -1))" 

Mari kita analisis apa yang kita miliki di atas. Pertama -tama Getopts Perintah harus digunakan di dalam a ketika loop jadi semua opsi diuraikan. Kemudian segera setelah Getopts Kata kunci, kami mendefinisikan opsi yang mungkin diterima skrip kami. Mereka l, H dan akhirnya A.

Apa arti usus setelah opsi terakhir ini? Ini adalah cara kami memberi tahu GetOpts bahwa opsi tersebut memerlukan argumen. Setiap opsi parsed akan disimpan di dalam $ Opsi variabel, saat argumen, saat ada, akan menjadi nilai dari$ OPTARG satu.

Setiap opsi dikelola di dalam pernyataan kasus, dengan final ? kasus yang akan dicocokkan setiap kali opsi yang tidak akan disediakan. Dalam hal ini kita hanya akan menggemakan pengguna penggunaan skrip yang benar dan keluar dengan kode kesalahan.

Menguji skrip kami

Pertama, kami akan memanggil skrip kami yang memberikan opsi yang tidak ada, hanya untuk menguji kasus yang kami sebutkan di atas. Mari berikan izin yang dapat dieksekusi skrip dan kemudian panggil:

tes chmod +x.SH && ./tesh.Sh -C 

Seperti yang diharapkan, kami akan menerima pesan yang memberi tahu kami bahwa opsi yang disediakan, adalah ilegal dan kemudian instruksi tentang cara menggunakan skrip:

./tes.SH: Opsi Ilegal - C Script Cript: Tes.sh [-l] [-h] [-a somevalue] 

Selagi penggunaan skrip String adalah yang kami atur untuk dicetak pada kesalahan penggunaan, di atasnya, itu adalah pesan yang dihasilkan secara otomatis oleh Getopts dan itu dapat dinonaktifkan dengan mengawali opsi dengan a :. Sekarang mari kita lihat apa yang terjadi ketika kita menggunakan skrip dengan cara itu seharusnya:



./tes.SH -L LinuxConfig 

Kami menggunakan l opsi, dan skrip yang dicetak di layar string yang kami atur dalam kasus yang sesuai, ini juga yang terjadi jika kami memberikan -H pilihan:

./tes.sh -h h adalah singkatan dari h 

Sekarang mari kita coba panggil skrip dengan A pilihan. Seperti yang dikatakan di atas opsi ini membutuhkan argumen, dan akan gagal jika yang terakhir tidak disediakan:

./tes.sh -a ./tes.SH: Opsi membutuhkan argumen - penggunaan skrip: tes.sh [-l] [-h] [-a somevalue] 

Seperti yang diharapkan, skrip menanggapi dengan pesan kesalahan, mengingatkan kami bahwa opsi yang kami berikan memerlukan argumen:

./tes.sh -a tuks nilainya adalah Tux 

Kali ini skrip merespons tanpa kesalahan. Perhatikan bagaimana argumen yang kami berikan, Tux itu dicetak karena menjadi nilai dari $ OPTARG variabel.

Menggunakan Getopts, Anda dapat memberikan juga lebih dari satu opsi pada saat itu untuk skrip Anda, menggabungkan bendera saat Anda meluncurkannya. Misalnya, mari kita lihat apa yang terjadi ketika kita mencoba memanggil skrip kita dengan keduanya l Dan H pilihan:

./tes.sh -lh linuxconfig h adalah singkatan dari h 

Seperti yang dapat kami amati, kedua opsi tersebut diproses, dalam urutan yang kami berikan kepada mereka. Kutukan Opsi dapat diberikan secara terpisah, dan kami juga dapat menambahkan A opsi, tetapi selalu ingat untuk menambahkan argumen yang diperlukan:

./tes.sh -l -h -a Tux_rulez LinuxConfig H Singkatan dari H Nilai yang disediakan adalah TUX_RULEZ 

Variabel $ optind

Jika kita melihat naskah yang sangat sepele yang telah kita tulis di atas, kita melihat instruksi lain di akhir loop sementara: shift $ (($ optind -1)). Apa tujuannya? Katakanlah kita memanggil skrip dengan cara ini:

./tes.sh -l -h -a hello world 

Saat skrip dipanggil, $ Optind Variabel diatur ke 1, dan bertambah setiap kali opsi diuraikan, sampai mencapai yang terakhir. Oleh karena itu, dalam hal ini, ia akan memiliki nilai 5 ketika akan mencapai elemen terakhir, yaitu Halo, argumen wajib yang diperlukan oleh -A pilihan.

menggeser adalah shell builtin yang menggerakkan parameter posisi skrip ke bawah sejumlah posisi yang ditentukan yang diberikan kepadanya sebagai angka positif, membuang argumen terkait.

Cara kami meluncurkan skrip di atas, argumen terakhir yang disediakan, "dunia", tidak diuraikan oleh Getopts, yang pada saat itu sudah menyelesaikan tugasnya.

Sekarang, jika kita membuat pergeseran nilai $ Optind - 1 (Itu adalah jumlah efektif dari opsi parsed, 4 dalam hal ini) pada parameter posisi, yang tersisa hanyalah argumen yang bukan opsi, dalam hal ini "dunia", yang dapat kita akses dengan menggunakan $* variabel nanti dalam skrip ini.

Tutorial Linux Terkait:

  • Bash Script: Bendera Penggunaan dengan Contoh Argumen
  • Hal -hal yang harus diinstal pada ubuntu 20.04
  • Bagaimana melakukan operasi administrasi dengan ansible…
  • Hal -hal yang harus dilakukan setelah menginstal ubuntu 20.04 FOSSA FOSSA Linux
  • Perintah Linux: 20 perintah terpenting teratas yang Anda butuhkan untuk…
  • Perintah Linux Dasar
  • File Konfigurasi Linux: 30 Teratas Paling Penting
  • Unduh Linux
  • Cara mencetak pohon direktori menggunakan linux
  • Can Linux mendapatkan virus? Menjelajahi kerentanan Linux…