Cara Menggunakan GetOpts Untuk Menguraikan Pilihan Skrip

Cara Menggunakan GetOpts Untuk Menguraikan Pilihan Skrip

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 menggunakan sudo 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 errexitmengubah 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 ..