Linux Shell Komut Dosyalarına GUI Nasıl Eklenir

Yayınlanan: 2022-01-29

Bir Ubuntu terminalinden başlatılan bir zenity bilgi penceresi.

Bash komut dosyalarınızda GUI pencerelerini, kaydırıcıları, radyo düğmelerini, ilerleme çubuklarını ve daha fazlasını kullanabilirsiniz. zenity araç setini nasıl kullanacağınızı öğrenin ve Bash komut dosyalarınıza bir görünüm kazandırın. Size nasıl olduğunu göstereceğiz.

Bash komut dosyası oluşturma, güçlü bir programlama dilidir ve Bash kabuğunda yerleşik olduğundan herkesin kullanımına açıktır. Programlamaya başlamak için kolay bir dildir. Yorumlandığı için betiklerinizi derlemeniz gerekmez. Komut dosyasını düzenlediğiniz ve çalıştırılabilir hale getirdiğiniz anda çalıştırabilirsiniz. Bu, kodlama, çalıştırma ve hata ayıklama döngüsünü oldukça verimli hale getirir.

İnsanların Bash komut dosyalarıyla ilgili iki ana şikayeti vardır ve ilki hızdır. Bash kabuğu komut dosyasındaki komutları yorumladığından, bunlar derlenmiş kod kadar hızlı yürütülmez. Ancak bu, traktörün araba kadar hızlı olmadığından şikayet etmeye benzer; onlar farklı şeyler içindir.

Yine de iki tür hız vardır. Genellikle hızlı bir komut dosyasını bir araya getirebilir ve bir görevi C gibi derlenmiş bir dilde bir çözüm geliştirmekten çok daha hızlı gerçekleştirmek için kullanabilirsiniz.

İnsanların Bash komut dosyalarıyla ilgili ikinci şikayeti, kullanıcı arayüzüdür - bu bir terminal penceresidir. Tabii ki, bazen arayüz önemli değil. Senaryoyu kullanacak tek kişi yazarıysa, arayüz muhtemelen o kadar önemli değildir. Arka plan ve toplu tip işleme gerçekleştiren komut dosyaları için de önemli değildir. Tipik olarak, bu tür komut dosyaları (varsa) çok fazla kullanıcı etkileşimine ihtiyaç duymaz.

Reklamcılık

Terminal penceresinden biraz daha sezgisel ve modern bir şeye ihtiyaç duyduğunuz durumlar vardır. Çoğu kişi bir grafik kullanıcı arayüzüne (GUI) aşinadır. İnsanlara olabildiğince sorunsuz bir deneyim sunmak için, komut dosyalarınızdan GUI öğeleri oluşturmalı ve kullanmalısınız.

Zenite Uygulaması

zenity , Bash komut dosyalarınıza çok çeşitli grafik arabirim öğeleri eklemenize olanak tanır. Senaryolarınıza modern bir his ve çağdaş, tanıdık bir görünüm kazandıran güçlü bir araç takımıdır.

zenity , Ubuntu, Fedora ve Manjaro dağıtımlarına önceden yüklenmiştir. GNOME'un bir parçasıdır. KDE kullanıyorsanız, zenity herhangi bir masaüstü ortamında çalışsa da, bunun yerine kdialog göz atmak isteyebilirsiniz.

Bu makaledeki örnekler, komut satırından farklı iletişim pencerelerinin nasıl oluşturulacağını, değişkenlerde bunların dönüş değerlerini ve kullanıcı seçimlerini nasıl yakalayacağınızı ve komut dosyalarında iletişim pencerelerinin nasıl kullanılacağını gösterir.

Üç tür iletişim penceresinin tümünü kullanan küçük bir uygulama ile bitiriyoruz.

Takvim İletişim Penceresi

Bir takvim iletişim penceresi, birinin bir tarih seçmesine olanak tanır. zenity ile bir tane oluşturmak için iki kelimeden oluşan tek bir komut gerekir:

 zenity --takvim 
Reklamcılık

Takvim iletişim penceresi görünür. Bu, standart bir tarih seçiciden bekleyeceğiniz tüm işlevselliğe sahiptir. Ay ve yılı değiştirebilir ve o tarihi seçmek için bir güne tıklayabilirsiniz. Varsayılan olarak, pencere göründüğünde bugünün tarihi vurgulanır.

Temmuz 2019'a ait bir zenity takvim penceresi.

İletişim penceresini kapatmak ve vurgulanan tarihi seçmek için “Tamam”a tıklayın. Bir tarihe çift tıklamak da aynı şeyi yapar.

Tarih seçimi yapmak istemiyorsanız, “İptal”e tıklayın, klavyenizdeki “Esc” tuşuna basın veya diyalog penceresini kapatın.

19 Ağustos 2019'un seçili olduğu bir zenity takvim penceresi.

Yukarıdaki örnekte 19 Ağustos 2019 seçilmiştir. Kullanıcı “Tamam”ı tıklarsa takvim kapanır ve seçilen tarih terminal penceresinde yazdırılır.

Terminal penceresinde gösterilen takvimde seçilen tarih (19/08/2019).

"GTKDialog, geçici bir ebeveyn olmadan eşlendi. Bu cesaret kırıcı.”

GTK, GNOME arayüzünü geliştirmek için kullanılan araç takımı olan GIMP Araç Kiti anlamına gelir. Başlangıçta GNU Görüntü İşleme Programının (GIMP) yazarları tarafından geliştirilmiştir. GNU, GNU'nun Unix Değil anlamına gelir.

Reklamcılık

GTK motoru, bir GTK bileşenini standart olmayan bir şekilde kullandıkları konusunda zenity yazarlarını uyarıyor.

Tarih Değerini Yakalama

Tarihi terminale yazdırmak bizim için pek bir şey yapmıyor. Bu takvimi komut dosyalarımızdan birinden çağıracaksak, komut dosyamızda yararlı bir şeyler yapabilmemiz için seçilen tarih değerini yakalamamız gerekir. Ayrıca takvimi biraz özelleştireceğiz.

Aşağıdaki seçenekleri takvimle kullanacağız. Hepsi çift tire “–” bayrağıyla kullanılmalıdır:

  • –text : Takvimde görüntülenecek metin dizesini belirtir. "Aşağıdan bir tarih seçin" varsayılanının yerini alır.
  • –title : Takvim iletişim penceresinin başlığını ayarlar.
  • –gün : Takvim açıldığında seçilen günü ayarlar.
  • –ay : Takvim açıldığında seçilen ayı ayarlar.
  • –year : Takvim açıldığında seçilen yılı ayarlar.

Takvimden döndürülen tarihi yakalamak için ChosenDate adlı bir değişken kullanıyoruz. Ve bu tarihi terminal penceresine yazdırmak için echo $ChosenDate kullanıyoruz.

Evet, bir önceki örnekte aynı sonucu elde ettik, ancak burada, bir değişkende saklanan seçilen tarih var. Önceki örnekte, yazdırıldı ve unutuldu.

 ChosenDate=$(zenity -- takvim -- metin "Bir tarih seçin" --title "Nasıl Yapılır Geek Rota" -- 1. gün -- 9. ay -- yıl 2019); echo $SeçilmişTarih 

Şimdi, takvim istemimizi ve pencere başlığımızı görüntüler. Tarih, bugünün tarihi yerine bizim seçtiğimiz başlangıç ​​tarihine ayarlanmıştır.

başlangıç ​​tarihi seçili (1 Eylül 2019) zenity takvimi.

Reklamcılık

Bir seçim yapıldığında döndürülen tarih dizisinin biçimini de özelleştirebiliriz. --date-format seçeneğinin ardından bir biçim belirteci gelmelidir. Bu, çıktıya dahil edilecek verileri ve biçimleri tanımlayan bir belirteç dizisidir. Belirteçler, strftime() C dil işleviyle kullanılanlarla aynıdır ve bunların çok büyük bir seçimi vardır.

Kullandığımız jetonlar:

  • %A : Haftanın gününün tam adı.
  • %d : Rakam olarak ayın günü.
  • %m : Rakam olarak ay.
  • %y : İki basamaklı yıl (yüzyıl yok).
 ChosenDate=$(zenity -- Calendar --text "Bir tarih seçin" --title "Nasıl Yapılır Geek Rota" --date-format="%A %d/%m/%y" --gün 1 -- ay 9 -- yıl 2019); echo $SeçilmişTarih 

Birisi bir tarih seçer:

16 Eylül 2019'un seçili olduğu zenity takvim penceresi.

Ve tarih, biçimimizi kullanarak döndürülür. Haftanın gününün adını, ardından Avrupa sırasına göre tarihi gösterir: gün, ay, yıl.

Dosya Seçimi İletişim Penceresi: Dosya Seçme

Dosya seçimi diyalog pencereleri oldukça karmaşıktır. Kişiler dosya sistemine göz atabilir, bir dosyayı veya dosyaları vurgulayabilir ve ardından bu dosyaları seçmek veya seçimi tamamen iptal etmek için “Tamam”a tıklayabilir.

zenity , tüm bu işlevleri ve daha fazlasını sağlar. Ve kullanımı da takvim iletişim penceresi kadar kolaydır.

Kullanacağımız yeni seçenekler şunlardır:

  • –file -selection : zenity bir dosya seçimi diyalog penceresi kullanmak istediğimizi söyler.
  • –multiple : Birinin birden fazla dosya seçmesine izin verir.
  • –file-filter : Dosya iletişim penceresine hangi dosya türlerinin görüntüleneceğini söyler.
 zenity --file-selection --tile "Nasıl Yapılır Geek" --multiple --file-filter='*.mm *.png *.page *.sh *.txt' 

Dosya seçimi iletişim penceresi, diğer herhangi bir dosya seçim penceresi kadar işlevseldir.

Bir klasörün seçili olduğu zenity dosya bölümü iletişim penceresi.

Kullanıcı dosya sistemine göz atabilir ve istediği dosyayı seçebilir.

bir dosyanın seçili olduğu zenity dosya seçimi iletişim penceresi

Reklamcılık

Yeni bir dizine göz attık ve “button_hybrid.png” adlı bir dosya seçtik.

“Tamam”ı tıkladığınızda, dosya seçimi iletişim penceresi kapanır ve dosya adı ve yol, terminal penceresinde yazdırılır.

Dosya adını başka bir işlemde kullanmanız gerekirse, tıpkı takvimdeki tarih için yaptığınız gibi, onu bir değişkende yakalayabilirsiniz.

Dosya Seçimi İletişim Penceresi: Bir Dosyayı Kaydetme

Bir seçenek eklersek, dosya seçimi diyalog penceresini bir dosya kaydetme diyalog penceresine çevirebiliriz. Seçenek --save . Ayrıca --confirm-overwrite seçeneğini kullanacağız. Bu, kişiden mevcut bir dosyanın üzerine yazmak istediğini onaylamasını ister.

 Yanıt=$(zenity --file-selection --save --confirm-overwrite); yankı $Yanıt 

Dosya kaydetme iletişim penceresi görünür. Birinin dosya adı yazabileceği bir metin alanı olduğunu unutmayın.

zenity dosyası kaydetme iletişim penceresi.

Kullanıcı, dosya sistemi içinde istediği konuma göz atabilir, dosya için bir ad sağlayabilir veya üzerine yazmak için mevcut bir dosyaya tıklayabilir.

Mevcut bir dosya seçiliyken zenity dosya kaydetme iletişim kutusu.

Reklamcılık

Yukarıdaki örnekte, kullanıcı mevcut bir dosyayı vurguladı.

“Tamam”ı tıkladığında, mevcut dosyayı değiştirmek istediğini onaylamasını isteyen bir onay iletişim penceresi belirir. Uyarı iletişim kutusunda dosyanın adının göründüğüne dikkat edin. zenity profesyonel görünümünü veren ayrıntılara gösterilen özen budur.

--confirm-overwrite seçeneğini kullanmamış olsaydık, dosyanın üzerine sessizce yazılırdı.

zenity üzerine yazma onayı iletişim kutusu.

Dosyanın adı, terminal penceresine yazdırılan Response değişkeninde saklanır.

Bildirim İletişim Penceresi

zenity ile, komut dosyalarınıza kaygan bildirim iletişim pencereleri dahil etmek zahmetsizdir. Kullanıcıya bilgi, uyarı, hata mesajı ve soru sağlamak için arayabileceğiniz stok iletişim pencereleri vardır.

Bir hata mesajı iletişim penceresi oluşturmak için aşağıdaki komutu kullanın:

 zenity --error --width 300 --text "İzin reddedildi. Dosyaya yazılamıyor."

Kullandığımız yeni seçenekler şunlardır:

  • –error : zenity bir hata iletişim penceresi kullanmak istediğimizi söyler.
  • –width : Pencerenin başlangıç ​​genişliğini ayarlar.

Reklamcılık

Hata iletişim penceresi belirtilen genişlikte görünür. Standart GTK hata simgesini kullanır.

zenity hatası iletişim penceresi.

Bir bilgi iletişim penceresi oluşturmak için aşağıdaki komutu kullanın:

 zenity --info --width 300 --text "Güncelleme tamamlandı. Devam etmek için Tamam'ı tıklayın."

Kullandığımız yeni seçenek zenity --info bilgi iletişim penceresi oluşturmasını söyleyen seçenek.

zenity bilgi iletişim penceresi.

Bir soru iletişim penceresi oluşturmak için aşağıdaki komutu kullanın:

 zenity --question --width 300 --text "Devam etmekten memnun musunuz?"; yankı $?

Kullandığımız yeni seçenek --question , zenity bir soru iletişim penceresi oluşturmasını söyleyen.

$? özel bir parametredir. En son yürütülen ön plan işlem hattından dönüş değerini tutar. Genel anlamda, bu en son kapatılan sürecin değeridir. Sıfır değeri "Tamam" anlamına gelir ve bir veya daha fazla değer "İptal" anlamına gelir.

Reklamcılık

Bu, herhangi bir zenity diyalog penceresine uygulayabileceğiniz genel bir tekniktir. Komut dosyanızda bu değeri kontrol ederek, bir iletişim penceresinden döndürülen verilerin işlenmesi mi yoksa yoksayılması mı gerektiğini belirleyebilirsiniz.

zenity soru iletişim kutusu.

"Evet"i tıkladık, bu nedenle dönüş kodu "Tamam"ı gösteren bir sıfırdır.

Bir uyarı iletişim penceresi oluşturmak için aşağıdaki komutu kullanın:

 zenity --warning --title "Düşük Sabit Disk Alanı" --width 300 --text "Yedeklemeyi kaydetmek için yeterli sabit disk alanı olmayabilir."

Kullandığımız yeni seçenek --warning , zenity bir uyarı iletişim penceresi oluşturmasını söyler.

Uyarı iletişim penceresi görünür. Bu bir soru değil, bu yüzden sadece bir düğmesi var.

zenity uyarı iletişim penceresi.

İlerleme İletişim Penceresi

Komut dosyanızın tamamlanmaya ne kadar yakın olduğunu gösteren bir ilerleme çubuğu görüntülemek için zenity ilerleme iletişim penceresini kullanabilirsiniz.

Reklamcılık

İlerleme çubuğu, komut dosyanızdan kendisine aktarılan değerlere göre ilerletilir. İlkeyi göstermek için aşağıdaki komutu kullanın:

 (i için $(seq 0 10 100); do echo $i; uyku 1; bitti) 

Komut şu şekilde bozulur:

  • seq komutu, 10'luk adımlarla 0'dan 100'e kadar bir dizide ilerler.
  • Her adımda, değer i değişkeninde saklanır. Bu, terminal penceresine yazdırılır.
  • sleep 1 komutu nedeniyle komut bir saniye duraklar.

İlerleme çubuğunu göstermek için bunu zenity ilerleme iletişim penceresiyle kullanabiliriz. Önceki komutun çıktısını zenity:

 (i için $(seq 0 10 100); do echo $i; uyku 1; bitti) | zenity --progress --title "Nasıl Yapılır Geek" -- otomatik kapanma 

Kullandığımız yeni seçenekler şunlardır:

  • –progress : zenity bir ilerleme iletişim penceresi kullanmak istediğimizi söyler.
  • –auto-close : İlerleme çubuğu yüzde 100'e ulaştığında iletişim kutusunu kapatır.

İlerleme iletişim penceresi görünür ve çubuk yüzde 100'e doğru ilerler ve her adım arasında bir saniye duraklar.

zenity ilerleme iletişim kutusu.

Bir komut dosyasına ilerleme iletişim penceresini dahil etmek için bu borulama değerleri kavramını zenity kullanabiliriz.

Bu metni bir düzenleyiciye girin ve “progress.sh” olarak kaydedin.

 !/bin/bash

işlev çalışma listesi () {

echo "# İlk iş öğesi" 
yankı "25"
uyku 1

echo "# İkinci iş öğesi" 
yankı "50"
uyku 1

echo "# Üçüncü iş öğesi" 
yankı "75"
uyku 1

echo "# Son iş öğesi" 
yankı "100"
uyku 1

}

iş listesi | zenity --progress --title "Nasıl Yapılır Geek" --auto-close

0 çıkışı

İşte senaryonun bir dökümü:

  • Komut dosyası, work-list adlı bir işlevi tanımlar. Burası, gerçek işi gerçekleştirmek için komutlarınızı ve talimatlarınızı koyduğunuz yerdir. sleep 1 komutlarının her birini gerçek olanlarla değiştirin.
  • zenity , echo "# ..." satırlarını kabul eder ve bunları ilerleme iletişim penceresinde görüntüler. Bu satırların metnini kullanıcıya bilgilendirici mesajlar iletecek şekilde değiştirin.
  • echo "25" gibi sayıları içeren echo satırları da zenity tarafından kabul edilir ve ilerleme çubuğunun değerini ayarlar.
  • İş listesi işlevi çağrılır ve zenity .

Komut dosyasını yürütülebilir hale getirmek için bu komutu kullanın:

 chmod +x ilerleme.sh 

Komut dosyasını çalıştırmak için bu komutu kullanın:

 ./ilerleme.sh 

Komut dosyası çalışır ve komut dosyasının her aşaması yürütülürken metin mesajı değişir. İlerleme çubuğu, adım adım yüzde 100'e doğru hareket eder.

zenity ilerleme çubuğu iletişim penceresi.

Ölçek İletişim Penceresi

Ölçek iletişim penceresi, birisinin sayısal bir değer seçmek için kaydırıcıyı hareket ettirmesine olanak tanır. Bu, çok yüksek veya düşük bir değer giremeyeceği anlamına gelir.

Kullandığımız yeni seçenekler şunlardır:

  • –scale : Bir ölçek iletişim penceresi kullanmak istediğimizi zenity .
  • –min-değeri : Ölçek için minimum değeri ayarlar.
  • –max-value : Ölçek için maksimum değeri ayarlar.
  • –adım : Ok tuşları kullanıldığında kaydırıcının hareket ettiği miktarı ayarlar. Birisi fareyi kullanırsa bu, kaydırıcı hareketlerini etkilemez.
  • –değer : Kaydırıcının başlangıç ​​değerini ve konumunu ayarlar.

Kullandığımız komut bu:

 Response=$(zenity --scale --title "Nasıl Yapılır?" --text "Büyütmeyi seçin." --min-value=0 --max-value=30 --step=3 --value15); yankı $Yanıt 

Reklamcılık

Kaydırıcı iletişim penceresi, kaydırıcı 15'e ayarlanmış olarak görünür.

zenity ölçeği iletişim penceresi.

Kullanıcı, yeni bir değer seçmek için kaydırıcıyı hareket ettirebilir.

kullanıcı seçimi ile zenity ölçeği iletişim

“Tamam”ı tıkladığında, değer Response değişkenine aktarılır ve terminal penceresine yazdırılır.

Giriş İletişim Penceresi

Giriş iletişim penceresi, birisinin metin girmesine izin verir.

Kullandığımız yeni seçenekler şunlardır:

  • –entry : zenity bir giriş diyalog penceresi kullanmak istediğimizi söyler.
  • –entry-text : Metin giriş alanına önerilen bir değeri yazmak istiyorsanız bunu kullanabilirsiniz. Boş bir alanı zorlamak için “” kullanıyoruz. Bu kesinlikle gerekli değildir, ancak seçeneği belgelemek istedik.

Tam komut şöyle görünür:

 Response=$(zenity --entry --text "Arama teriminizi girin" --title "Howe-To Geek" --entry-text=""); yankı $Yanıt 

Bir metin giriş alanı içeren basit bir iletişim penceresi görünür.

zenity giriş iletişim penceresi.

Birisi metin yazabilir ve düzenleyebilir.

metin alanına yazılan metin ile zenity giriş iletişim penceresi.

“Tamam”a tıkladığında yazdığı değer Response değişkenine atanır. Terminal penceresindeki değişkenin değerini yazdırmak için echo kullanıyoruz.

Hepsini bir araya koy

Bu teknikleri bir araya getirelim ve fonksiyonel bir script oluşturalım. Komut dosyası bir donanım bilgisi taraması yapacak ve sonuçları kayan bir metin penceresinde kullanıcıya sunacaktır. Uzun veya kısa bir tarama türü seçebilir.

Reklamcılık

Bu komut dosyası için, ikisi bizim için yeni olan üç tür iletişim penceresi kullanacağız:

  • İlki bir liste iletişim penceresidir. Birinin seçim yapmasına izin verir.
  • İkincisi, kullanıcının bir şeyler olduğunu bilmesini sağlayan bir ilerleme iletişim penceresidir ve beklemesi gerekir.
  • Üçüncüsü, sonuçları kullanıcıya gösteren bir metin bilgi penceresidir.

Bu metni bir düzenleyiciye girin ve “hardware-info.sh” olarak kaydedin.

 #!/bin/bash

# Bu bilgisayar için donanım listesini görüntüle

TempFile=$(mktemp)

ListType=`zenity --width=400 --height=275 --list --radiolist \
     --başlık 'Donanım Taraması' \
     --text 'Tarama türünü seçin:' \
     --sütun 'Seç' \
     --column 'Tarama Türü' DOĞRU "Kısa" YANLIŞ "Uzun"`

eğer [[ $? -eq 1 ]]; sonra

  # İptal'e bastılar veya iletişim penceresini kapattılar 
  zenity --error --title="Tarama Reddedildi" --width=200 \
       --text="Donanım taraması atlandı"
  çıkış 1
 
elif [ $ListType == "Kısa" ]; sonra

  # kısa radyo düğmesini seçtiler 
  Flag="--kısa"
 
Başka

  # uzun radyo düğmesini seçtiler 
  İşaretle="" 
fi

# $ Flag içinde uygun değere sahip donanım bilgilerini arayın
hwinfo $Bayrak | tee >(zenity --width=200 --height=100 \
     --title="Bilgi Derleme" --progress \
     --pulsate --text="Donanım kontrol ediliyor..." \
     --auto-kill --auto-close) >${TempFile}
 
# Donanım bilgilerini kayan bir pencerede görüntüleyin
zenity --genişlik=800 --yükseklik=600\
     --başlık "Donanım Ayrıntıları" \
     --text-info --filename="${TempFile}"
 
0 çıkışı

Yürütülebilir hale getirmek için bu komutu kullanın:

 chmod +x donanım bilgisi.sh 

"chmod +x haredware-info.sh" terminal penceresinde.

Bu komut dosyası geçici bir dosya oluşturur ve dosyanın adı TempFile değişkeninde tutulur:

 TempFile=$(mktemp)

Komut dosyası, liste iletişim penceresi adı verilen bir zenity iletişim penceresi oluşturmak için --list seçeneğini kullanır. Satırların sonundaki “\” karakterleri, komut dosyasına, bunları etrafına sarılmış uzun bir satır gibi davranmasını söyler. İşte süreç:

  • Pencere için bir genişlik ve yükseklik belirliyoruz.
  • Liste iletişim penceresi sütunları destekler. --radiolist seçeneği, ilk sütunun bir radyo düğmeleri sütunu olmasına neden olur.
  • Pencere için bir başlık ve metin istemi belirledik.
  • İlk sütunun başlığını “Seç” olarak belirledik. Bu sütunun içeriği radyo düğmeleri olacaktır.
  • İkinci sütunun başlığını “Seç” olarak belirledik ve ikinci sütunun içeriğini sağlıyoruz. Bu sütunda iki metin etiketi bulunur: "Kısa" ve "Uzun". DOĞRU ve YANLIŞ göstergeleri, diyalog penceresi göründüğünde varsayılan olarak “Kısa” seçeneğinin seçildiği anlamına gelir.
  • Bu iletişim penceresindeki sonucu ListType adlı bir değişkende saklıyoruz.
 ListType=`zenity --width=400 --height=275 --list --radiolist \ 
     --başlık 'Donanım Taraması' \ 
     --text 'Tarama türünü seçin:' \ 
     --sütun 'Seç' \ 
     --column 'Tarama Türü' DOĞRU "Kısa" YANLIŞ "Uzun"`

Kullanıcı “İptal”e basarsa, ListType, değeri kontrol etmemize gerek yoktur, basitçe çıkabiliriz. "Tamam"a basarsa, "Kısa" veya "Uzun" radyo düğmesini seçip seçmediğini öğrenmemiz gerekir:

  • Özel parametre $? kullanıcı "Tamam"a basarsa sıfıra eşittir. “İptal”e bastıysa veya pencereyi kapattıysa bire eşittir.
  • Bire eşitse, komut dosyası bir hata bilgisi iletişim penceresi görüntüler ve çıkar. “Tamam”a basarsa, ListType değişkenindeki değeri test etmeye devam ederiz.
  • ListType değişkeni "Kısa" değerini içeriyorsa, komut dosyası Flag adlı bir değişkeni "–short" değerine eşitler.
  • ListType değişkeni "Kısa" değerini tutmuyorsa, "Uzun" değerini tutmalıdır. Komut dosyası, Flag adlı bir değişkeni boş bir dize olan "" değerine eşitleyecek şekilde ayarlar.
  • Komut dosyası, sonraki bölümde Flag değişkenini kullanır.
 eğer [[ $? -eq 1 ]]; sonra 

  # İptal'e bastılar veya iletişim penceresini kapattılar 
  zenity --error --title="Tarama Reddedildi" --width=200 \ --text="Donanım taraması atlandı" 
  çıkış 1 

elif [ $ListType == "Kısa" ]; sonra 

 # kısa radyo düğmesini seçtiler 
 Flag="--kısa" 

Başka 

 # uzun radyo düğmesini seçtiler 
 İşaretle="" 
fi
Reklamcılık

Artık komut dosyası, kullanıcının hangi tür tarama istediğini bildiğine göre, donanım bilgisi taramasını gerçekleştirebiliriz:

  • Komut dosyası hwinfo komutunu çağırır ve ona Flag değişkenindeki değeri iletir.
  • Flaghwinfo ” içeriyorsa, hwinfo komutu kısa bir tarama gerçekleştirir. Flag değeri “” ise, hwinfo hiçbir şey geçmez ve varsayılan, uzun bir tarama gerçekleştirilir.
  • Komut dosyası, çıktıyı hwinfo tee tee çıktıyı zenity ve TempFile gönderir.
  • Komut dosyası, bir ilerleme çubuğu iletişim penceresi oluşturur. İletişim penceresinin genişliğini ve yüksekliğini, başlığı ve bilgi istemi metinlerini ayarlar.
  • Komut dosyası, hwinfo komutunun ne kadar bilgi üreteceğini önceden bilemez, bu nedenle ilerleme çubuğunu yüzde 100'e doğru ilerlemeye ayarlayamaz. --pulsate seçeneği, ilerleme iletişim kutusunun hareketli bir gösterge göstermesine neden olur. Bu, kullanıcıya bir şeyler olduğunu bildirir ve beklemesi gerekir.
  • --auto-kill seçeneği, birisi "İptal"i tıklatırsa komut dosyasını sonlandırır.
  • --auto-close seçeneği, izlediği işlem tamamlandığında ilerleme iletişim kutusunun otomatik olarak kapanmasına neden olur.
 # $ Flag içinde uygun değere sahip donanım bilgilerini arayın
hwinfo $Bayrak | tee >(zenity --width=200 --height=100 \
     --title="Bilgi Derleme" --progress \
     --pulsate --text="Donanım kontrol ediliyor..." \
     --auto-kill --auto-close) >${TempFile}

hwinfo taraması tamamlandığında, komut dosyası --text-info seçeneğiyle bir metin bilgisi iletişim penceresi oluşturmak için zenity çağırır. Metin bilgileri iletişim penceresi TempFile dosyasının içeriğini görüntüler:

  • Komut dosyası, iletişim penceresinin genişliğini ve yüksekliğini ve başlık metnini ayarlar.
  • --flename seçeneği, TempFIle değişkeninde tutulan dosyanın içeriğini okumak için kullanılır.
 # Donanım bilgilerini kayan bir pencerede görüntüleyin 
zenity --genişlik=800 --yükseklik=600\ 
     --başlık "Donanım Ayrıntıları" \ 
     --text-info --filename="${TempFile}"

Kullanıcı metin bilgisi iletişim penceresini kapattığında, komut dosyası çıkar.

 0 çıkışı

Ateş edip bir bakalım.

 ./hardware-info.sh 

Liste kutusu görünür. "Kısa" seçeneği varsayılan olarak seçilidir.

"Kısa" seçeneğinin seçili olduğu liste iletişim kutusu.

“Uzun”u seçelim ve ardından “Tamam”a tıklayalım.

"Uzun" seçeneğinin seçili olduğu liste iletişim kutusu.

İlerleme penceresi, kayan bir göstergeyle görüntülenir. Donanım taraması tamamlanana kadar ekranda kalır.

Kayan göstergeli ilerleme penceresi.

Donanım taraması tamamlandığında, taramanın ayrıntılarıyla birlikte metin bilgisi iletişim penceresi görünür.

Bir metin bilgisi iletişim penceresinde donanım tarama bilgileri.

"Tamam" ı tıklayın.

Reklamcılık

Ölümcül bir komut satırı jokeyinin bile birkaç GUI iletişim penceresinin mütevazı bir Bash betiğine profesyonel bir dokunuş verebileceğini kabul etmesi gerekir.