Cara menggunakan getopts untuk menguraikan opsi skrip
- 2994
- 713
- Dominick Barton
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 menggunakansudo
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 Errexit
memodifikasi 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…