Ini adalah artikel terakhir dari seri yang berfokus pada skrip Gnu Bash. Pada artikel pertama kami baru saja membuat skrip sederhana dengan perintah, satu demi satu. Kami juga melihat beberapa variabel yang digunakan.
Artikel kedua membahas beberapa struktur kontrol bash. Yang ketiga mencakup pengalihan, pipa, dan substitusi perintah.
Pada yang terakhir (untuk saat ini), saya akan menunjukkan cara membuat antarmuka pengguna dengan dialog di skrip kami.
Dialog pemasangan
Sumbernya dapat diunduh untuk dikompilasi dari sini:https://invisible-island.net/dialog/. Untuk menginstal binari yang telah dikompilasi, distro Anda pasti memiliki paket bernama 'dialog' yang dapat Anda instal dengan alat paket.
Opsi umum
Opsi berikut berlaku untuk setiap widget yang dapat kita gunakan pada dialog. Yang tercantum di sini tidak semuanya, tetapi yang paling sering saya gunakan.
- --ascii-lines Daripada menggambar garis grafik di sekitar kotak, "+" dan "-" di tempat yang sama.
- --judul judul Menentukan string judul yang akan ditampilkan di bagian atas kotak dialog.
- --default-button string Atur tombol yang telah dipilih sebelumnya di widget. Biasanya tombol pertama di setiap widget adalah default.
- --default-item string Setel item default dalam daftar periksa, formulir, atau kotak menu.
- --tanpa garis Daripada menggambar garis di sekitar kotak, gambarlah spasi di tempat yang sama.
- --tanpa bayangan Menekan bayangan yang akan digambar di kanan dan bawah setiap kotak dialog
- --backtitle backtitle Menentukan string judul latar yang akan ditampilkan di bagian atas layar.
- --stdout Output langsung ke output standar. Berguna untuk menyimpan pilihan atau respon pengguna dalam sebuah variabel
Misalnya:
dialog --backtitle 'this is backtitle' --title 'Title' --infobox "This is just an infobox with some options settled" 0 0
akan menghasilkan output ini:
Contoh lain:
Saran saya untuk skrip dengan beberapa layar adalah menambahkan alias dengan beberapa opsi umum sehingga Anda tidak perlu mengetik (atau menyalin) setiap saat, seperti ini:
alias dialog="dialog --backtitle 'this is backtitle' --title 'Title' --stdout" dialog --infobox "This is just an infobox" 0 0
Beberapa widget
Kotak Info
Itu contoh dari atas. Sintaksnya adalah:
--infobox text height width
Di mana teks adalah teks yang akan ditampilkan, dan tinggi dan lebar adalah ukuran kotak dialog. Anda dapat menggunakan output dari perintah untuk teks dengan substitusi perintah, yaitu --infobox "$(cat somefile.txt)" . Ukuran dinyatakan dalam karakter, nilai 0 berarti otomatis.
yesno
Kotak gaya kueri tipikal dengan tombol jawaban "Ya" dan "Tidak". Sintaksnya adalah:
--yesno text height width
Kita dapat menggunakannya pada blok if-then-else dengan beberapa kode seperti ini:
if dialog --yesno "continue?" 0 0 then echo "You choose to continue" some_command some_other_command else echo "no" fi
menu
Daftar pilihan bergulir dengan pilihan entri tunggal. Sintaksnya adalah:
--menu text height width menu-height tagX itemX tagY itemY
Setiap entri menu terdiri dari string tag dan string item. Saya pikir bagus untuk digabungkan dengan blok case-esac seperti pada contoh berikut:
case $(dialog --menu "A menu of choices " 0 0 0 a item\ 1 b item\ 2 c item\ 3 d item\ 4) in a) echo "Item A" some commands ;; b) echo "Item B" some other commands ;; *) echo other ;; esac
kotak masukan
Kotak input berguna saat Anda ingin mengajukan pertanyaan yang mengharuskan pengguna memasukkan string sebagai jawabannya. Sintaksnya adalah:
--inputbox text height width [init]
init adalah opsional dan dapat digunakan untuk menetapkan jawaban default.
daftar periksa
Kotak daftar centang mirip dengan kotak menu:ada beberapa entri yang disajikan dalam bentuk menu. Namun alih-alih memilih hanya satu entri, setiap entri dapat diaktifkan atau dinonaktifkan. Sintaksnya adalah:
--checklist text height width list-height tag item status
statusnya bisa on atau off. Kita dapat bekerja dengan opsi yang dipilih dengan loop for dan blok kasus untuk mengevaluasi opsi yang dipilih. Contoh:
for i in $(dialog --checklist "A menu of choices " 0 0 0 a item\ 1 off b item\ 2 off c item\ 3 off ) do case $i in a) echo "item 1 selected" ;; b) echo "item 2 selected" ;; c) echo "item 3 selected" ;; esac done
Alternatifnya adalah radiolist di mana pengguna dapat memilih hanya satu item.
pengukur
Bilah kemajuan yang khas. Meter menunjukkan persentase. Persentase baru dibaca dari input standar, satu bilangan bulat per baris. Sintaksnya adalah:
--gauge text height width [percent]
Persen adalah opsional dan mewakili persen awal yang dilakukan. Ini dapat digunakan dengan pipa. Misalnya:
seq 1 100|dialog --gauge "A gauge" 0 0
Kalender
Kotak kalender menampilkan bulan, hari, dan tahun. Sintaksnya adalah:
--calendar text height width day month year
Jika nilai hari, bulan, atau tahun tidak ada atau negatif, tanggal saat ini akan digunakan.
Ke mana harus pergi dari sini
Saya baru saja menunjukkan beberapa widget yang tersedia (ada lebih dari dua puluh). Halaman manual dialog memberikan bantuan untuk semuanya.
Tentu saja, dialog bukan satu-satunya alat yang tersedia untuk membuat antarmuka pengguna teks. Ada alternatif seperti Xdialog, Whiptail (keduanya disebutkan di halaman manual dialog) atau Zenity. Ingatlah bahwa ada lebih dari satu cara untuk melakukannya.
Empat seri artikel tentang skrip bash ini masih jauh untuk diselesaikan. Niat saya adalah untuk membuat Anda merasa cukup penasaran untuk menyelidiki sendiri. Simpan halaman manual bash (yang terkadang membingungkan, setidaknya bagi saya). Dan lebih dekat dengan Anda Panduan Skrip Bash Tingkat Lanjut untuk panduan yang lebih komprehensif, penuh dengan contoh.