GNU/Linux >> Belajar Linux >  >> Linux

Cara menggunakan whiptail untuk membuat skrip interaktif yang lebih ramah pengguna

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

Linux
  1. Cara Membuat dan Menggunakan Subdomain

  2. Cara Menggunakan GParted untuk Membuat dan Mengubah Ukuran Partisi dengan Mudah

  3. Cara menggunakan rsyslog untuk membuat server agregasi log Linux

  1. Cara Membuat Alias ​​​​dan Menggunakan Perintah Alias ​​​​di Linux

  2. Cara menggunakan input dalam skrip shell Anda

  3. Apa itu Skrip Shell? Bagaimana Cara Membuat Script Shell?

  1. Cara Menggunakan Perintah mkdir untuk Membuat atau Membuat Direktori Linux

  2. Cara Membuat Peran yang Mungkin dan Menggunakannya di Playbook

  3. Bagaimana Systemd Menggunakan Skrip /etc/init.d?