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 Komutu

Bash kabuğunun kendi içinde bulunan select komutu, kullanıcıya numaralandırılmış bir seçenek listesi sunar ve seçilen öğeye göre işlem yapmanızı sağlar. for döngüsüne benzer bir yapısı vardır.

#!/bin/bash

# Boşluk içeren seçenekler için tırnak kullanmak daha güvenli olabilir
# veya bir dizi (array) kullanılabilir:
# SECENEKLER=("Disk Durumu" Yardım Çıkış)
# select i in "${SECENEKLER[@]}"; do ...
SECENEKLER="Disk-Durumu Yardim Cikis"

# PS3 değişkeni select'in göstereceği istemi (prompt) ayarlar
PS3="Lütfen bir seçenek girin (1-3): " 

echo "Bir işlem seçin:"
select i in $SECENEKLER; do
    # Modern test [[ ... ]] kullanımı
    if [[ "$i" == "Cikis" ]]; then
        echo "Çıkılıyor..."
        break # Döngüden çık
    elif [[ "$i" == "Yardim" ]]; then
        echo "Yardım menüsü gösteriliyor..."
        # Burada yardım metni gösterilebilir
    elif [[ "$i" == "Disk-Durumu" ]]; then
        echo "Disk durumu:"
        df -h
    else
        # Kullanıcı geçersiz bir numara girerse $i boş olur
        # $REPLY değişkeni kullanıcının girdiği ham değeri içerir
        echo "Geçersiz seçenek: $REPLY"
    fi
done

Örnek Çalıştırma:

whiptail (ve dialog)

whiptail, newt kütüphanesini kullanarak terminalde metin tabanlı grafiksel diyalog kutuları (mesaj kutuları, giriş kutuları, menüler vb.) oluşturmanızı sağlayan bir programdır. Kurulum betiklerinde veya basit TUI (Text User Interface) uygulamalarında kullanıcı etkileşimi için sıkça kullanılır.

Benzer bir araç olan dialog, ncurses kütüphanesini kullanır ve genellikle whiptail ile çok benzer komut satırı seçeneklerine sahiptir. Sisteminizde hangisinin kurulu olduğuna bağlı olarak birini tercih edebilirsiniz (sudo apt install whiptail veya sudo apt install dialog / sudo dnf install newt veya sudo dnf install dialog).

Aşağıda whiptail ile bazı yaygın diyalog kutusu örnekleri verilmiştir.

Not: whiptail genellikle kullanıcı seçimini veya girdisini standart hataya (stderr - FD 2) yazar. Bunu bir değişkene atamak için, standart hata ile standart çıktının yerini değiştirmek gerekir. Örneklerdeki 3>&1 1>&2 2>&3 ifadesi bu işlemi yapar:

  1. 3>&1: Geçici olarak FD 3'ü orijinal standart çıktıya (FD 1) yönlendirir.

  2. 1>&2: Standart çıktıyı (FD 1) standart hataya (FD 2) yönlendirir (whiptail'in arayüzü buraya gider).

  3. 2>&3: Standart hatayı (FD 2 - whiptail'in çıktısı) orijinal standart çıktıya (artık FD 3'te saklanan) yönlendirir. Bu sayede $(...) komut yakalama mekanizması, whiptail'in stderr'e yazdığı sonucu yakalayabilir.

msgbox

Aşağıdaki gibi bir komut ile görsel bir uyarı sağlayabilirsiniz.

Komutun sonundaki rakamlar (10 50), pencerenin yüksekliğini (satır) ve genişliğini (karakter) belirtir.

Örneğin Ok yerine Tamam yazmasını sağlayabilirdik:

yes/no

Programınızın basit Evet/Hayır soruları sormasını sağlayabilirsiniz. whiptail --yesno komutu, kullanıcı "Evet" seçerse 0, "Hayır" seçerse 1 çıkış koduyla sonlanır. $? ile bu kontrol edilebilir.

inputbox

Kullanıcıdan metin girdisi almak için inputbox kullanılır. Girilen metin standart hataya yazdırılır.

Kullanıcıya bir listeden tek bir seçim yapma imkanı sunar. Seçilen öğenin "etiketi" standart hataya yazdırılır.

checklist

Kullanıcıya bir listeden birden fazla seçim yapma (işaretleme) imkanı sunar. Seçilen öğelerin etiketleri, tırnak içinde ve boşlukla ayrılarak standart hataya yazdırılır.

radiolist

checklist'e benzer, ancak kullanıcıya listeden sadece bir tane seçim yapma imkanı sunar. Seçilen öğenin etiketi standart hataya yazdırılır.

Last updated