Menüler
Yazdığınız programların kullanıcı ile etkileşimini sağlayan çeşitli menüler oluşturmak isteyebilirsiniz. Aşağıda iki yöntemini sunacağız.
select
En temel yöntem select komutunu kullanmaktır. for loop kullanır gibi kullanıcı etkileşimi oluşturmanızı sağlar. Temel yapsını paylaşıyoruz. Bunun üzerine kendi programınızı geliştirip fonksiyonlarla süsleyebilirsiniz.
eaydin@dixon ~/calisma/bash $ cat select.sh
#!/bin/bash
SECENEKLER="Disk-Durumu Yardim Cikis"
select i in $SECENEKLER; do
if [ "$i" = "Cikis" ]; then
exit
elif [ "$i" = "Yardim" ]; then
echo "Yardim menusu"
elif [ "$i" = "Disk-Durumu" ]; then
df -h
else
echo "Secenek Anlasilmadi?"
fi
done
eaydin@dixon ~/calisma/bash $ ./select.sh
1) Disk-Durumu
2) Yardim
3) Cikis
#? 1
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 346G 32G 296G 10% /
none 4,0K 0 4,0K 0% /sys/fs/cgroup
udev 3,8G 4,0K 3,8G 1% /dev
tmpfs 777M 1,5M 775M 1% /run
none 5,0M 0 5,0M 0% /run/lock
none 3,8G 114M 3,7G 3% /run/shm
none 100M 20K 100M 1% /run/user
/dev/sda6 374G 150G 225G 40% /media/backups
#? 3
eaydin@dixon ~/calisma/bash $
whiptail
whiptail başlı başına incelenmesi gereken ve kompleks menüler sunmanızı sağlayan bir programdır. Burada temel olarak nasıl mesajlar sunabileceğinizin üzerinden geçeceğiz.
msgbox
Aşağıdaki gibi bir komut ile görsel bir uyarı sağlayabilirsiniz.
whiptail --msgbox "Bu bir uyari mesaji" 10 50
Komutun sonundaki rakamlar, pencerenin yüksekliğini ve genişliğini belirtir.
Örneğin Ok yerine Tamam yazmasını sağlayabiirdik.
whiptail --msgbox "Bu bir uyari mesaji" 10 50 --ok-button="Tamam"
yes/no
Programınızın basit Evet/Hayır soruları sormasını sağlayabilirsiniz.
#!/bin/bash
whiptail --title "Anket" --yesno "GNU/Linux'u özgür buluyor musunuz?" \
--yes-button Evet --no-button Hayır 20 60
if [ $? -eq 0 ]; then
whiptail --msgbox "Çok haklısınız!" --ok-button Tamam 10 40
else
whiptail --msgbox "Yanılıyor olabilirsiniz" --ok-button Tamam 10 40
fi
inputbox
Kullanıcıdan girdi almak için inputbox kullanabilirsiniz.
#!/bin/bash
YENI_HOSTNAME=$(whiptail --inputbox "Yeni Hostname Giriniz:" \
8 60 $(hostname) --title "Hostname Değiştirme" --ok-button Tamam \
--cancel-button İptal 3>&1 1>&2 2>&3)
exitstat=$?
if [ $exitstat = 0 ] && [ ! -z $YENI_HOSTNAME ]; then
hostname $YENI_HOSTNAME
else
echo "işlem iptal edildi"
fi
Yukarıdaki program, inputbox ile sonuç dinler, eğer "Tamam" seçeneği işaretlenmiş, ve YENI_HOSTNAME değeri boş değilse hostname komutunu kullanarak bilgisayar adını değiştirir, aksi taktirde işlemi iptal eder. Programın girdi kutucuğunun öntanımlı değeri olarak mevcut hostname'i kullandığı görülebilir.
menu
Aşağıdaki yöntemle kullanıcılarınıza bir menü sunabilirsiniz.
#!/bin/bash
SECIM=$(whiptail --title "Programlama Menüsü" \
--menu "Bir dil seçin" 17 50 0 \
"Python" "Guido van Rossum" \
"C" "Dennis M. Ritchie" \
"Perl" "Larry Wall" \
"PHP" "Rasmus Lerdorf" 3>&1 1>&2 2>&3)
if [ $? = 0 ] && [ ! -z $SECIM ]; then
echo "$SECIM dilini seçtiniz"
else
echo "Dil seçmediniz"
fi
checklist
#!/bin/bash
SECIM=$(whiptail --title "Programlama Menüsü" --checklist \
"Kullandığınız Dilleri Seçin" 10 60 5 \
"Python" "Guido van Rossum" ON \
"C" "Dennis M. Ritchie" OFF \
"Perl" "Larry Wall" OFF \
"PHP" "Rasmus Lerdorf" ON 3>&1 1>&2 2>&3)
if [ $? -eq 0 ]; then
echo "Seçtiğiniz diller:"
echo "$SECIM"
else
echo "Dil seçmediniz"
fi
radiolist
#!/bin/bash
SECIM=$(whiptail --title "Programlama Menüsü" --radiolist \
"Kullandığınız Dilleri Seçin" 10 60 5 \
"Python" "Guido van Rossum" OFF \
"C" "Dennis M. Ritchie" ON \
"Perl" "Larry Wall" OFF \
"PHP" "Rasmus Lerdorf" OFF 3>&1 1>&2 2>&3)
if [ $? -eq 0 ]; then
echo "Seçtiğiniz diller:"
echo "$SECIM"
else
echo "Dil seçmediniz"
fi