Cara membuat menu pilihan menggunakan pernyataan pilih di bash shell

Cara membuat menu pilihan menggunakan pernyataan pilih di bash shell

Kita semua sering menggunakan skrip bash untuk mengautkan tugas yang membosankan dan berulang -ulang. Kadang -kadang dalam skrip kita perlu kita tanya
Pengguna untuk melaksanakan satu atau lebih pilihan secara interaktif: Dalam tutorial ini kita akan melihat cara menggunakan pernyataan pilih shell bash untuk melaksanakan operasi tersebut dalam baris yang sangat sedikit kod.

Dalam tutorial ini anda akan belajar:

  • Cara Menggunakan Pernyataan Pilih Bash
  • Cara menyesuaikan prompt menu pilih
Cara membuat menu pilihan menggunakan pernyataan pilih di bash shell

Keperluan perisian dan konvensyen yang digunakan

Keperluan Perisian dan Konvensyen Talian Perintah Linux
Kategori Keperluan, konvensyen atau versi perisian yang digunakan
Sistem Pengedaran-bebas
Perisian The Bash Shell
Yang lain Tiada keperluan khas
Konvensyen # - Memerlukan arahan Linux yang diberikan untuk dilaksanakan dengan keistimewaan akar sama ada secara langsung sebagai pengguna root atau dengan menggunakan sudo perintah
$ - Memerlukan arahan Linux yang diberikan sebagai pengguna yang tidak layak

Pernyataan pilih

Skrip adalah salah satu kemahiran yang paling biasa yang harus dimiliki oleh pentadbir sistem, untuk mengautomasikan berulang -ulang
tugas dan membuat mereka kurang terdedah kepada kesilapan. Dalam kes yang tidak terlalu kompleks, shell adalah alat yang sempurna untuk digunakan untuk pekerjaan. Bash, The Bourne lagi Shell, adalah shell yang paling banyak digunakan di dunia GNU/Linux. Shell ini memberikan yang sangat berguna pilih penyata. Tujuannya diterangkan dengan cara berikut:

Pilih perkataan dari senarai dan laksanakan arahan



Penerangannya cukup jelas. Kenyataan ini membolehkan kami secara interaktif menerima input dari pengguna, menghasilkan senarai pilihan yang bernombor dan mendorongnya untuk memilih satu. Mari lihat bagaimana ia digunakan:

pilih nama [dalam kata -kata ...;] lakukan arahan; selesai

Sintaks sangat serupa dengan tradisional untuk gelung di bash, kecuali penggunaan pilih kata kunci. Walau bagaimanapun, pernyataan pilih berfungsi dengan cara yang berbeza. Mari lihat contoh. Katakan kami ingin meminta pengguna memilih salah satu fail yang terkandung dalam direktori. Inilah yang boleh kita tulis:

$ files = "$ (ls -a .) "$ pilih nama fail dalam $ files; do echo" $ file "; selesai 1) file1 2) file2 3) file3 #?

Mari kita jelaskan apa yang telah kita lakukan. Pertama sekali kami memperoleh senarai semua fail yang terdapat dalam direktori (dalam hal ini direktori kerja semasa) menggunakan ls perintah dan menentukan -A pilihan (pendek untuk --hampir semua), untuk mengecualikan tersirat . dan dari senarai yang dikembalikan, yang kami berikan kepada fail pembolehubah.

Kami kemudian menggunakannya pilih penyata. Di atas adalah contoh yang sangat asas: kami memberikan hasil pengembangan fail pemboleh ubah sebagai senarai pilihan yang hendak dimasukkan. Perhatikan bahawa kami mengelakkan memetik pengembangan $ fail dengan tujuan, untuk mendapatkan Pemisahan perkataan: Apabila pengembangan dipetik dengan petikan berganda Pemisahan perkataan ditindas, jadi ruang tidak digunakan sebagai pembatas perkataan dan hasil pengembangan dianggap secara keseluruhan. Ini bukan apa yang kita mahukan dalam kes ini: kita memerlukan setiap perkataan untuk digunakan sebagai pilihan dalam menu yang dihasilkan.



Kata -kata yang diperoleh dari pengembangan pembolehubah dicetak di stderr (kesalahan biasa). Masing -masing didahului dan dikaitkan dengan nombor, iaitu apa yang pengguna akan gunakan untuk merujuknya. Setelah semua elemen dipaparkan, pengguna diminta memasukkan pilihannya. Apa yang dipaparkan ialah PS3 segera, yang, secara lalai ditetapkan ke #?.

Apa yang berlaku apabila pengguna melakukan pilihan? Mari kita lihat:

$ files = "$ (ls -a .) "$ pilih nama fail dalam $ files; do echo" anda memilih $ filename "; selesai 1) file1 2) file2 3) file3 #? 1 anda memilih fail1 # #?

Pilihan yang kita masukkan, 1, dibaca dari stdin (input standard) dan jika nombor yang dimasukkan adalah antara yang tersedia, perkataan yang sepadan ("file1" dalam contoh) diberikan kepada,nama fail pembolehubah. Dalam contoh kami, kami tentukan echo "$ filename" sebagai arahan yang akan dilaksanakan sebaik sahaja pilihan dilakukan: sebagai hasilnya: perkataan yang dipilih dicetak di skrin. Nombor yang kami masukkan untuk menentukan pilihan kami juga disimpan dalam pembolehubah: Balas.

Anda mungkin melihat perkara yang pelik berlaku dalam contoh di atas: Setelah kami melakukan pilihan kami, setelah pelaksanaan perintah itu, kami diminta lagi untuk pilihan, mengapa? Ini berlaku kerana kami tidak menyediakan rehat
perintah. Kita boleh dengan mudah membetulkannya:

$ files = "$ (ls -a .) "$ pilih nama fail dalam $ files; do echo" anda memilih $ filename "; break; selesai 1) file1 2) file2 3) file3 #? 1 anda memilih fail1

Bagaimana jika kita tidak menyediakan pilihan? Gegaran hanya diulang sehingga kita lakukan:

pilih nama fail dalam $ files; lakukan echo "anda memilih $ filename"; rehat; Selesai 1) File1 2) File2 3) File3 #? 1) File1 2) File2 3) File3 # #? 

Bagaimana jika kita memasukkan nombor yang tidak ada dalam senarai? Dalam kes ini pemboleh ubah yang kami gunakan, nama fail dalam kes kami, ditetapkan ke batal.

Menukar arahan pemilihan

Seperti yang telah kita lihat, arahan yang digunakan oleh shell dalam konteks pernyataan pilih adalah PS3 segera, yang secara lalai, mempunyai #? rentetan mempunyai nilai. Ini tidak mesra pengguna, jadi kami mungkin mahu mengubahnya dan menggunakan sesuatu yang lebih deskriptif. Bagaimana kita boleh melakukannya? Sangat mudah: kita mesti mengubah nilai PS3 parameter:

$ Ps3 = "Sila masukkan pilihan anda:"


Lain kali kita akan menggunakan pilih pernyataan, kami akan melihat perubahan itu:

pilih nama fail dalam $ files; do echo "Anda dipilih $ fileName $ Reply"; rehat; Selesai 1) File1 2) File2 3) File3 Masukkan pilihan anda: 

Perubahan yang dibuat kepada pemboleh ubah akan berkuatkuasa hanya untuk bahagian shell semasa, dan, jika kita eksport Pembolehubah, juga dalam semua anaknya:

$ eksport ps3 = "Sila masukkan pilihan anda:"

Walau bagaimanapun, perubahan itu kekal sementara sehingga kami menetapkan PS3 pembolehubah di dalam .Bashrc fail. PS3 hanyalah salah satu arahan yang digunakan dalam Bash: periksa artikel prompt bash kami jika anda ingin mengetahui lebih lanjut mengenai subjek.

Kesimpulan

Dalam tutorial ini kita belajar cara menggunakan bash pilih penyata. Kami melihat bagaimana ia berfungsi, dan bagaimana kami boleh menggunakannya untuk membuat menu pemilihan untuk secara interaktif meminta pengguna untuk melakukan pilihan. Akhirnya kita melihat cara menyesuaikan prompt yang dipaparkan dalam menu pemilihan dengan mengubah shell PS3 parameter.

Tutorial Linux Berkaitan:

  • Menguasai Gelung Skrip Bash
  • Pengenalan kepada Automasi, Alat dan Teknik Linux
  • Gelung bersarang dalam skrip bash
  • Perkara yang hendak dipasang di Ubuntu 20.04
  • Perkara yang perlu dilakukan setelah memasang ubuntu 20.04 Focal Fossa Linux
  • Mint 20: Lebih baik daripada Ubuntu dan Microsoft Windows?
  • Mengendalikan input pengguna dalam skrip bash
  • Tutorial Debugging GDB untuk Pemula
  • Sistem Hung Linux? Cara melarikan diri ke baris arahan dan ..
  • Cara Menyiapkan Pelayan OpenVPN di Ubuntu 20.04