Beberapa sysadmin di dunia Linux perlu diyakinkan akan kekuatan dan pentingnya skrip. Skrip ada di mana-mana, dan Anda tahu bahwa skrip itu penting untuk administrasi sistem Linux. Banyak skrip yang berjalan tanpa suara, meskipun skrip dijalankan secara manual oleh pengguna atau admin.
Beberapa skrip, bagaimanapun, menyampaikan informasi kepada pengguna atau meminta informasi dari mereka. Anda dapat menggunakan fitur skrip seperti echo
atau read
untuk mencapai tujuan-tujuan ini. Sayangnya, tidak satu pun dari alat ini yang menampilkan informasi dengan cara yang mewah atau dengan cara yang menarik perhatian pengguna.
Whiptail menambahkan kotak dialog yang lebih interaktif ke skrip Anda. Kotak-kotak ini memberikan informasi, meminta masukan, atau memaksa pengakuan. Konten yang ditampilkan dalam format antarmuka pengguna (TUI) berbasis teks dan dinavigasi dengan Tab kunci. Pilihan dipilih dengan Spasi kunci.
Dalam artikel ini, saya memandu Anda melalui instalasi whiptail
(mudah!) lalu tunjukkan beberapa contoh dasar.
[ Pembaca juga menyukai: Bahasa pemrograman apa yang berguna untuk sysadmin? ]
Instal whiptail
Instalasi mudah. Saya menggunakan Fedora 33 untuk contoh ini. Whiptail disertakan sebagai bagian dari perpustakaan newt yang lebih besar, yang menambahkan fungsionalitas ke jendela TUI.
Instal whiptail
dengan menggunakan perintah berikut:
[damon@localhost ~]$ sudo dnf install newt
Itu saja untuk instalasi.
Pada artikel ini, Anda akan membuat file vim individual dengan kode khusus whiptail. Ingatlah untuk menyelesaikan tugas-tugas berikut untuk setiap file yang didemonstrasikan:
- Sebutkan dengan jelas
- Buat eksekusi dengan mengetikkan
chmod 744 demo.sh
- Jalankan dengan menggunakan
./
sebelum nama file jika lokasinya tidak sepanjang PATH
Catatan :Saya berasumsi vim karena saya lebih menyukainya. Nano atau editor teks lainnya sudah cukup.
Selanjutnya, saatnya untuk melibatkan beberapa skrip.
Menampilkan kotak dialog dasar
Anda sebenarnya tidak memerlukan skrip untuk menampilkan kotak dialog dasar dari whiptail
. Dalam contoh ini, Anda akan mendeklarasikan dan kemudian memanggil variabel. Variabel hanyalah semacam pesan yang akan diakui dengan OK tombol. Tidak ada pilihan yang ditawarkan, dan tidak ada navigasi yang digunakan.
Pada prompt perintah, ketik informasi berikut:
[damon@localhost ~]$ message="Today, we will learn about Whiptail."
[damon@localhost ~]$ whiptail --msgbox --title "Intro to Whiptail" "$message" 25 80
Setelah antarmuka ditampilkan, perhatikan judul yang Anda tentukan muncul di bilah atas. Pesan Anda juga hadir. Oke tombol tersedia. Dalam whiptail
perintah, Anda memasukkan dua
nilai:25 dan 80 . Nilai-nilai tersebut adalah pengukuran kolom dan dapat disesuaikan. Mereka menentukan ukuran jendela antarmuka. Berhati-hatilah untuk memilih ukuran yang tidak menghabiskan seluruh layar dan mencegah pengguna melihat seluruh pesan atau memilih Oke . Sebagian besar jendela Terminal akan disetel ke 80 kolom atau lebih.
Setelah Anda mengamati semua komponen antarmuka, pilih OK dengan menekan tombol Enter kunci.
Dalam contoh ini, Anda menggunakan dua opsi:--msgbox
dan --title
Dan sekarang contoh yang lebih menarik.
Buat kueri
Skrip dapat ditulis yang menerima masukan pengguna. Jika Anda menulis skrip yang akan berinteraksi dengan pengguna non-teknis, mungkin bermanfaat untuk membuat antarmuka yang lebih ramah pengguna. Dalam contoh ini, pengguna akan ditanya dua pertanyaan:Nama dan negara.
Buat file bernama query.sh
dengan konten berikut.
#Part 1 - Query for the user's name
NAME=$(whiptail --inputbox "What is your name?" 8 39 --title "Getting to know you" 3>&1 1>&2 2>&3)
exitstatus=$?
if [ $exitstatus = 0 ]; then
echo "Greetings," $NAME
else
echo "User canceled input."
fi
echo "(Exit status: $exitstatus)"
#Part 2 - Query for the user's country
COUNTRY=$(whiptail --inputbox "What country do you live in?" 8 39 --title "Getting to know you" 3>&1 1>&2 2>&3)
exitstatus=$?
if [ $exitstatus = 0 ]; then
echo "I hope the weather is nice in" $COUNTRY
else
echo "User canceled input."
fi
echo "(Exit status: $exitstatus)"
Perhatikan bahwa dalam contoh ini, Anda menggunakan --inputbox
bukannya --msgbox
. Anda telah mengatur whiptail
kode sebagai pernyataan if/then.
8 dan 39 nilai menentukan ukuran kotak dialog. Jika Anda mengikuti di lingkungan lab Anda sendiri, ganti 39 dengan 10 , simpan perubahan Anda, dan jalankan kembali whiptail
kode. Anda akan melihat bahwa kotak dialog terlalu kecil untuk berguna. Gunakan Tab tombol untuk memilih Batal , lalu setel kembali nilai ukuran ke 39 dari 10 .
Jangan lupa untuk mengatur izin agar file dapat dieksekusi dan gunakan ./
untuk menjalankannya dari lokasi saat ini.
[damon@localhost ~]$ chmod 777 query.sh
[damon@localhost ~]$ ./query.sh
Berikut adalah tampilan hasil setelah menyelesaikan kotak dialog:
Anda telah memberikan informasi kepada pengguna melalui kotak pesan dan mengumpulkan informasi dari pengguna melalui kotak masukan. Selanjutnya, ajukan beberapa pertanyaan tambahan kepada pengguna.
Buat kotak dialog ya/tidak
Ada banyak variasi untuk mengajukan pertanyaan kepada pengguna. Dalam hal ini, Anda akan menggunakan kueri ya/tidak sederhana untuk mengetahui apakah hari ini hari Selasa. Anda dapat melakukan ini dengan membuat file pengujian bernama tuesday.sh
dan menempatkan konten berikut ke dalamnya:
if (whiptail --title "Is it Tuesday?" --yesno "Is today Tuesday?" 8 78); then
echo "Happy Tuesday, exit status was $?."
else
echo "Maybe it will be Tuesday tomorrow, exit status was $?."
fi
Alih-alih --inputbox
atau --msgbox
dari contoh sebelumnya, Anda menggunakan --yesno
pilihan. Seperti contoh sebelumnya, yang ini diatur sebagai kueri if/then.
Berikut adalah output yang dihasilkan:
--yesno
opsi kotak juga memungkinkan kami untuk mengedit konten bidang "Ya" dan "Tidak". Ini contohnya:
if (whiptail --title "Is it Tuesday?" --yesno "Is today Tuesday?" 8 78 --no-button "Not Tuesday" --yes-button "Tuesday"); then
echo "Happy Tuesday, exit status was $?."
else
echo "Maybe it will be Tuesday tomorrow, exit status was $?."
fi
Satu-satunya modifikasi pada contoh adalah penambahan dua --no-button
dan --yes-button
pilihan, dengan teks yang sesuai (dalam hal ini, "Bukan Selasa" dan "Selasa").
Berikut adalah tampilan kotak dialog yang dihasilkan:
Satu hal terakhir. Whiptail mengirimkan input pengguna ke stderr. Ya, Anda membacanya dengan benar:stderr, dan
bukan stdout, tempat Anda mengambil input pengguna untuk menggunakannya dalam skrip. Cara mengatasi masalah ini adalah membalikkan pengalihan sehingga input pengguna masuk ke stdout.
Berikut adalah ungkapan untuk melakukan itu:
3>&1 1>&2 2>&3
Penjelasan:
- Buat deskriptor file 3 yang mengarah ke 1 (stdout)
- Arahkan 1 (stdout) ke 2 (stderr)
- Arahkan 2 (stderr) ke deskriptor 3 file, yang diarahkan ke stdout
Berikut adalah tampilannya dalam cuplikan skrip dari --inputbox
di atas contoh:
NAME=$(whiptail --inputbox "What is your name?" 8 39 --title "Getting to know you" 3>&1 1>&2 2>&3)
[ Lembar contekan gratis:Glosarium Kubernetes ]
Menutup
Saya telah menunjukkan beberapa contoh dasar, tetapi whiptail
dapat melakukan lebih banyak lagi. Saya telah menyediakan cukup banyak di sini untuk membantu Anda dan ada banyak tutorial berguna secara online. Skrip Anda akan membutuhkan cara untuk menggunakan input yang telah dimasukkan pengguna. Saya mendorong Anda untuk meninjau skrip interaktif Anda untuk menentukan apakah menambahkan kotak dialog TUI akan membantu.
Berikut daftar opsi kotak utama yang tersedia untuk whiptail
:
- --judul
- --kotak info
- --msgbox
- --ya tidak
- --kotak masukan
- --kotak sandi
- --menu
- --kotak teks
- --daftar periksa
- --radiol
- --ukur