Cara Menggunakan GetOpts Untuk Menguraikan Pilihan Skrip
- 3942
- 37
- Daryl Wilderman
Objektif
Ketahui cara menggunakan bash getopts
dibina untuk menghuraikan pilihan skrip
Sistem operasi dan versi perisian
- Sistem operasi: - Semua pengagihan Linux
Keperluan
- Tiada keperluan khas, hanya akses ke cangkang bash
Kesukaran
Medium
Konvensyen
- # - Memerlukan arahan Linux yang diberikan dengan keistimewaan akar sama ada
secara langsung sebagai pengguna akar atau dengan menggunakansudo
perintah - $ - Memerlukan arahan Linux yang diberikan sebagai pengguna yang tidak layak
Pengenalan
Mengubah suai tingkah laku skrip bash melalui pilihan runtime, seperti yang biasanya kita lakukan dengan program baris arahan, boleh sangat berguna. Shell bash menyediakan getopts
arahan terbina, cara standard untuk mencapai matlamat ini. Cara menggunakannya adalah apa yang akan kita pelajari dalam tutorial ini.
Membuat Skrip Ujian Kami
Untuk tujuan tutorial ini, kami akan membuat skrip ujian, dan, dengan banyak fantasi, kami akan memanggilnya ujian.sh
. Tujuan skrip ini adalah untuk mengeluarkan sesuatu yang bergantung kepada pilihan yang akan kami sediakan (ia tidak akan menjadi skrip yang paling berguna di dunia tetapi cukup untuk menjelaskan bagaimana keadaan berfungsi).
Mari buka editor teks kami dan mulakan:
#!/bin/set bash -e set -u set -o pipefail
Pilihan shell yang disediakan pada permulaan skrip tidak wajib, tetapi tabiat yang baik untuk menggunakannya dalam setiap skrip yang kita tulis. Secara ringkas, -e
, ringkasan untuk errexit
mengubah tingkah laku shell yang akan keluar apabila perintah keluar dengan status bukan sifar (dengan beberapa pengecualian). -u
adalah satu lagi pilihan yang sangat penting: ini menjadikan shell untuk merawat pembolehubah yang tidak ditentukan sebagai kesilapan.
Akhirnya Pipefail
mengubah cara memerintahkan di dalam paip dinilai. Status keluar paip akan menjadi arahan paling kanan untuk keluar dengan status bukan sifar, atau sifar jika semua program dalam paip dilaksanakan dengan jayanya. Dengan kata lain, paip akan dianggap berjaya jika semua arahan yang terlibat dilaksanakan tanpa kesilapan.
GetOpts membina
Setelah penggambaran ringkas ini, mari kita kembali ke titik utama tutorial ini dan mari kita lihat bagaimana getopts
Kerja:
#!/bin/bash set -e set -u set -o pipefail manakala getopts 'lha:' opsyen; lakukan kes "$ pilihan" dalam l) echo "linuxconfig" ;; h) echo "h bermaksud h" ;; a) avalue = "$ optArg" echo "Nilai yang disediakan adalah $ optArg" ;; ?) echo "penggunaan skrip: $ (baseName \ $ 0) [-l] [-h] [-a somevalue]"> & 2 exit 1 ;; shift ESAC "$ (($ optind -1))"
Mari kita analisis apa yang kita ada di atas. Pertama dari semua getopts
Perintah mesti digunakan di dalam a manakala
gelung jadi semua pilihan dihuraikan. Kemudian segera selepas getopts
Kata kunci, kami menentukan pilihan yang mungkin akan diterima skrip kami. Mereka L
, h
dan akhirnya a
.
Apa maksud kolon selepas pilihan terakhir ini? Ini adalah cara kita memberitahu getopts bahawa pilihan memerlukan hujah. Setiap pilihan dihuraikan akan disimpan di dalam Pilihan $
pemboleh ubah, sementara hujah, ketika ada, akan menjadi nilai dari$ Optarg
satu.
Setiap pilihan diuruskan dalam pernyataan kes, dengan final ?
kes yang akan dipadankan apabila pilihan yang tidak wujud akan disediakan. Dalam hal ini kita hanya akan menggema pengguna penggunaan skrip yang betul dan keluar dengan kod ralat.
Menguji skrip kami
Pertama, kami akan memanggil skrip kami yang menyediakan pilihan yang tidak ada, hanya untuk menguji kes yang kami nyatakan di atas. Mari kita berikan keizinan yang boleh dilaksanakan skrip dan kemudian namakannya:
ujian chmod +x.sh && ./Tesh.sh -c
Seperti yang dijangkakan kami akan menerima mesej yang memberitahu kami bahawa pilihan yang disediakan, adalah haram dan kemudian arahan tentang cara menggunakan skrip:
./ujian.SH: Pilihan haram - Penggunaan skrip C: Ujian.sh [-l] [-h] [-a somevalue]
Sementara penggunaan skrip
String adalah yang kami tetapkan untuk dicetak pada ralat penggunaan, di atasnya, ini adalah mesej yang dihasilkan secara automatik oleh getopts
dan ia boleh dilumpuhkan dengan mengutamakan pilihan dengan a :
. Sekarang mari kita lihat apa yang berlaku apabila kita menggunakan skrip dengan cara yang dimaksudkan untuk:
./ujian.sh -l linuxconfig
Kami menggunakan L
pilihan, dan skrip dicetak pada skrin rentetan yang kami tetapkan dalam kes yang sepadan, ini juga apa yang berlaku jika kami menyediakan -h
pilihan:
./ujian.sh -h h bermaksud h
Mari kita cuba hubungi skrip dengan a
pilihan. Seperti yang dikatakan di atas pilihan ini memerlukan hujah, dan akan gagal jika yang terakhir tidak disediakan:
./ujian.sh -a ./ujian.SH: Pilihan memerlukan hujah - penggunaan skrip: ujian.sh [-l] [-h] [-a somevalue]
Seperti yang dijangkakan, skrip itu bertindak balas dengan mesej ralat, mengingatkan kita bahawa pilihan yang kami berikan memerlukan hujah:
./ujian.sh -a tux nilai yang disediakan adalah tux
Kali ini skrip bertindak balas tanpa kesilapan. Perhatikan bagaimana hujah yang kami berikan, tux
ia dicetak kerana ia menjadi nilai $ Optarg
pembolehubah.
Menggunakan getopts
, Anda juga boleh menyediakan lebih daripada satu pilihan pada masa itu ke skrip anda, menggabungkan bendera semasa anda melancarkannya. Contohnya, mari kita lihat apa yang berlaku apabila kita cuba memanggil skrip kita dengan kedua -dua L
dan h
Pilihan:
./ujian.sh -lh linuxconfig h
Seperti yang dapat kita perhatikan, kedua -dua pilihan telah diproses, mengikut urutan yang kami berikan kepada mereka. Kutukan pilihan boleh diberikan secara berasingan, dan kita juga boleh menambah a
pilihan, tetapi sentiasa ingat untuk menambah hujah yang diperlukan:
./ujian.sh -l -h -a tux_rulez linuxconfig h bermaksud h nilai yang disediakan adalah tux_rulez
Pemboleh ubah optind $
Sekiranya kita melihat skrip yang sangat remeh yang telah kita tulis di atas, kita melihat arahan lain pada akhir gelung sementara: shift $ (($ optind -1))
. Apa tujuannya? Katakan kita memanggil skrip dengan cara ini:
./ujian.sh -l -h -a dunia hello
Apabila skrip dipanggil, $ Optind
Pembolehubah ditetapkan kepada 1, dan ia bertambah setiap kali pilihan dihuraikan, sehingga mencapai yang terakhir. Oleh itu, dalam kes ini, ia akan mempunyai nilai 5 apabila ia akan mencapai elemen terakhir, iaitu Helo
, hujah wajib yang diperlukan oleh -a
pilihan.
shift
adalah binaan shell yang menggerakkan parameter kedudukan skrip ke bawah bilangan kedudukan tertentu yang diberikan kepadanya sebagai nombor positif, membuang argumen yang berkaitan.
Cara kami melancarkan skrip di atas, hujah yang terakhir disediakan, "dunia", tidak dihuraikan oleh getopts
, yang pada ketika itu sudah menyelesaikan tugasnya.
Sekarang, jika kita membuat peralihan nilai $ Optind - 1
(Itulah bilangan pilihan yang dihuraikan, 4 dalam kes ini) pada parameter kedudukan, apa yang tersisa hanyalah argumen yang bukan pilihan, dalam kes ini "dunia", yang dapat kita akses dengan menggunakan $*
berubah -ubah kemudian dalam skrip ini.
Tutorial Linux Berkaitan:
- Skrip Bash: Penggunaan Bendera dengan Contoh Argumen
- Perkara yang hendak dipasang di Ubuntu 20.04
- Cara Melaksanakan Operasi Pentadbiran dengan Ansible ..
- Perkara yang perlu dilakukan setelah memasang ubuntu 20.04 Focal Fossa Linux
- Perintah Linux: Top 20 Perintah Paling Penting yang Anda Perlu ..
- Perintah Linux Asas
- Fail Konfigurasi Linux: 30 teratas yang paling penting
- Muat turun linux
- Cara mencetak pokok direktori menggunakan linux
- Bolehkah linux mendapat virus? Meneroka kelemahan Linux ..