Kabuk betiklerinin yalnızca CLI ortamında kullanıldığına dair bir yanlış anlaşılma var. Aslında, KDE veya Gnome masaüstü altında, GUI veya ağ (soket) komut dosyaları yazmak için çeşitli araçları etkin bir şekilde kullanabilirsiniz. Kabuk betikleri bazı GUI bileşenlerini (menüler, uyarı kutuları, ilerleme çubukları, vb.) Kullanabilir ve terminal çıktısını, imleç konumunu, çeşitli çıktı efektlerini vb. Kontrol edebilirsiniz. Aşağıdaki araçlarla güçlü, etkileşimli ve kullanıcı dostu UNIX / Linux bash betikleri oluşturabilirsiniz.
GUI uygulamaları yapmak zor bir iş değildir, ancak zaman ve sabır gerektirir. Neyse ki, hem UNIX hem de Linux, güzel GUI betikleri yazmak için birçok araçla birlikte gelir. Aşağıdaki araçlar FreeBSD ve Linux işletim sistemlerine göre test edilmiştir ve diğer UNIX işletim sistemleri için de uygundur.
1. Bildir-gönder komutu
Notify-send komutu, kullanıcılara masaüstü bildirimleri göndermek için bildirim arka plan programını kullanmanıza olanak tanır. Kullanıcıları rahatsız etmekten kaçınmanın bu yolu, masaüstü kullanıcılarını bir olay hakkında bilgilendirmek veya bazı bilgileri görüntülemek için kullanışlıdır. Debian veya Ubuntu'da, paketi apt komutunu veya apt-get komutunu kullanarak yüklemeniz gerekir:
sudo apt-get install libnotify-binCentOS / RHEL kullanıcıları aşağıdaki yum komutunu kullanır:
sudo yum libnotify yüklemekFedora Linux kullanıcıları aşağıdaki dnf komutunu kullanır:
`$ sudo dnf libnotify yükle` Bu örnekte, komut satırından basit masaüstü bildirimi gönderin, şunu girin: ### Bazı bildirimler gönderin ### notify-gönder "rsnapshot done :)"Örnek çıktı:
notify-send: Kabuk Komut Dosyası Masaüstü Bildirimleri Al veya Gönder
İşte başka bir ek seçeneğin kodu:
... alert = 18000 live = $ (lynx --dump | grep'BSE LIVE '| awk' {print $ 5} '| sed'ler /, // g; s /\.*// g ') {notify-send -t 5000 -u low -i "BSE Sensex 18k dokundu"; notify_counter = 1;} ...Örnek çıktı:
Linux / UNIX: notify-send ile Kabuk Betiklerinizdeki Bildirimleri Görüntüleyin
Buraya:
Bildir-gönder işlevini kullanma hakkında daha fazla bilgi için lütfen kullanım kılavuzuna bakın. Şunları görmek için komut satırına man notify-send yazın:
adam bildir-gönder2. tput komutu
Tput komutu, terminal karakteristiklerini ayarlamak için kullanılır. Tput ile şunları ayarlayabilirsiniz:
İşte örnek bir kod:
#! / bin / bash # ekranı temizle temizle # İmleci X, Y ekran konumuna getirin (sol üst 0,0'dır) tput kupası 315 # ANSI kaçışını kullanarak bir ön plan rengi ayarlayın tput setaf 3 echo "XYX Corp LTD." tput sgr0 tput kupası 517 # Ters video modunu ayarlayın tput rev echo "M A I N-M E N U" tput sgr0 tput kupası 715 echo "1. Kullanıcı Yönetimi" tput kupası 815 echo "2. Hizmet Yönetimi" tput kupası 915 echo "3. Süreç Yönetimi" tput kupası 1015 echo "4. Yedekleme" # Kalın modu ayarla tput kalın tput kupası 1215 -p "Seçiminizi girin" seçeneğini okuyun temizle tput sgr0 tput rcÖrnek çıktı:
Linux / UNIX Komut Dosyası Renkleri ve tput ile İmleç Hareketi
Tput komutu hakkında ayrıntılı bilgi için kılavuza bakın:
adam 5 terminal adam tput3. setleds komutu
Setleds komutu, klavye ışıklarını ayarlamanıza izin verir. Aşağıda sayı tuşu ışığının açılmasına bir örnek verilmiştir:
setleds -D + numSayı tuşu ışığını kapatın, şunu girin:
setleds -D -numDaha fazla bilgi ve seçenekler için setleds kılavuzuna bakın.
4. Zenity komutu
Zenity komutu, GTK + iletişim kutusunu görüntüler ve kullanıcı girdisini döndürür. Kullanıcılara bilgi göstermek veya talep etmek için çeşitli kabuk komut dosyalarını kullanmanıza izin verir. Aşağıda, etki alanı adı dizin hizmetini belirten whois için bir GUI istemcisi örneği verilmiştir.
#! / bin / bash # Alan adı alın _zenity = "/ usr / bin / zenity" _out = "/ tmp / whois.output. $$" etki alanı = $ ($ {_ zenity} --title "Etki alanı girin" \ --entry --text "Whois bilgilerini görmek istediğiniz alan adını girin") ise sonra # Whois veritabanında arama yaparken bir ilerleme iletişim kutusu görüntüleyin whois $ alan adı | tee > ($ {_ zenity} --width = 200 --height = 100 \ --title = "whois" --progress \ --pulsate --text = "Alan bilgisi aranıyor ..." \ --auto-kill --auto-close \ - yüzde = 10) > $ {_ çıkış} # Arka çıkışı görüntüle $ {_ zenity} --width = 800 --height = 600 \ --title "$ alan için Whois bilgisi" \ --text-info --filename = "$ {_ çıkış}" Başka $ {_ zenity} --hata \ --text = "Giriş sağlanmadı" fiÖrnek çıktı:
zenity: Linux / UNIX, Kabuk Betiklerinden İletişim Kutularını görüntüler
Daha fazla zenity bilgisi ve GTK + 'yı destekleyen diğer bileşenler için kılavuza bakın:
zenity - yardım adam zenitesi5. kdialog komutu
Kdialog komutu, zenity'ye benzer, ancak KDE masaüstü ve QT uygulamaları için tasarlanmıştır. Diyalogları görüntülemek için kdialog'u kullanabilirsiniz. Aşağıdaki örnek, ekranda bilgi gösterecektir:
kdialog --dontagain myscript: nofilemsg --msgbox "Dosya: '~ / .backup / config' bulunamadı."Örnek çıktı:
Kdialog: Bir iletişim kutusunun görüntüsünü bastırma
Daha fazla bilgi için "KDE İletişim Kutusu Komut Dosyası Programlama" eğitimine bakın.
6. Diyalog
Dialog, kullanıcı arabirimi bileşenlerinin metnini görüntülemek için kabuk komut dosyalarını kullanan bir uygulamadır. Curses veya ncurses kitaplığını kullanır. İşte örnek bir kod:
#! / bin / bash dialog --title "Dosyayı sil" \ --backtitle "Linux Kabuğu Komut Dosyası Eğitimi Örneği" \ --yesno "\" / tmp / foo.txt \ "dosyasını kalıcı olarak silmek istediğinizden emin misiniz?" 760 # Çıkış durumunu alın # 0, kullanıcının basma düğmesi anlamına gelir. # 1, kullanıcının düğmesine basması anlamına gelir. # 255, kullanıcı tuşuna basmak anlamına gelir. yanıt = $? case $ yanıt 0) echo "Dosya silindi." ;; 1) echo "Dosya silinmedi." ;; 255) echo "tuşuna basıldı." ;; esacAyrıntılar için iletişim kılavuzuna bakın: adam diyaloğu.
Diğer kullanıcı arayüzü araçlarıyla ilgili notlar
UNIX ve Linux, komut satırında uygulamaları görüntülemek ve kontrol etmek için çok sayıda başka araç sağlar. Kabuk betikleri bazı KDE, Gnome ve X bileşen setlerini kullanabilir:
7, günlükçü komutu
Logger komutu, / var / log / messages gibi bilgileri sistem günlük dosyasına yazar. Sistem günlüğü modülü syslog için bir kabuk komut satırı arabirimi sağlar:
logger "MySQL veritabanı yedeklemesi başarısız oldu." tail -f / var / log / mesajlar logger -t mysqld -p daemon.error "Veritabanı Sunucusu başarısız oldu" tail -f / var / log / syslogÖrnek çıktı:
Nisan 2000:11:45 vivek-masaüstü kernel: CPU0: Sıcaklık / hız normal Nisan 2000:12:20 vivek-desktop mysqld: Veritabanı Sunucusu başarısız olduDaha fazla bilgi için "Sistem günlüğüne veya günlük dosyalarına mesaj nasıl yazılır" konusuna bakın. Ek olarak, ayrıntılı bilgi için kaydedici kılavuzuna da bakabilirsiniz: man logger
8, setterm komutu
Setterm komutu farklı uçbirim nitelikleri ayarlayabilir. Aşağıdaki örnek kod, ekranı 15 dakika sonra kararmaya zorlar ve monitör 60 dakika sonra bekleme moduna geçer.
setterm -blank 15 -güç tasarrufu güç kesintisi -powerdown 60Aşağıdaki örnek, xterm penceresindeki metni altı çizili olarak görüntüler:
setterm -underline açık; echo "Önemli Mesajınızı Buraya Ekleyin" setterm -underline kapalıDiğer bir kullanışlı seçenek de imleç ekranını açmak veya kapatmaktır:
setterm - imleç kapalıİmleci açın:
setterm -cursor açıkAyrıntılar için setterm komut kılavuzuna bakın: man setterm
9. smbclient: MS-Windows iş istasyonlarına mesaj gönderin
Smbclient komutu SMB / CIFS sunucusuyla iletişim kurabilir. MS-Windows sistemindeki seçilen veya tüm kullanıcılara mesaj gönderebilir.
smbclient -M WinXPPro < < eof Mesaj 1 Message 2 ... .. EOFveya
echo "$ {Message}" | smbclient -M salesguy2Smbclient kılavuzuna bakın veya önceki makalemizi okuyun: "Windows İş İstasyonlarına Mesaj Gönderin": man smbclient
10. Bash soket programlama
Bash altında, bir soket açabilir ve içinden veri gönderebilirsiniz. Uzak sunuculardan veri almak için curl veya lynx komutlarını kullanmanıza gerek yoktur. bash ve iki özel aygıt dosyası ağ soketlerini açmak için kullanılabilir. Aşağıdakiler bash kılavuzundan alınmıştır:
Bu tekniği, nmap veya diğer bağlantı noktası tarayıcıları kullanmadan yerel veya uzak sunucu bağlantı noktasının açık veya kapalı olup olmadığını belirlemek için kullanabilirsiniz.
# 25 numaralı TCP bağlantı noktasının açık olup olmadığını öğrenin (Eko > / dev / tcp / localhost / 25) > / dev / null echo "TCP bağlantı noktası 25 açık" || echo "TCP bağlantı noktası 25 kapat"Aşağıdaki kod parçacığı ile hangi bağlantı noktalarının açıldığını bulmak için bir bash döngüsü kullanabilirsiniz:
echo "TCP bağlantı noktaları taranıyor ..." {1..1023} 'te p için yapmak (Eko > / dev / tcp / localhost / $ p) > / dev / null 2 > 1 echo "$ p açık" bittiÖrnek çıktı:
TCP bağlantı noktaları taranıyor ... 22 açık 53 açık 80 açık 139 açık 445 açık 631 açıkAşağıdaki örnekte, bash betiğiniz bir HTTP istemcisi gibi çalışacaktır:
#! / bin / bash yürütme 3 < > /dev/tcp/${1:-www.cyberciti.biz}/80 printf "GET / HTTP / 1.0 \ r \ n" > 3 printf "Kabul et: metin / html, metin / düz \ r \ n" > 3 printf "Kabul-Dili: en \ r \ n" > 3 printf "Kullanıcı Aracısı: nixCraft_BashScript v.% s \ r \ n" "$ {BASH_VERSION}" > 3 printf "\ r \ n" > 3 LINE okurken < 3 yapmak # $ LINE'da bir şeyler yapın # veya verileri almak için grep veya awk'ye $ LINE gönderin # veya echo komutuyla verileri geri görüntüleyin echo $ LINE bittiDaha fazla bilgi için bash kılavuzuna bakın: man bash
GUI araçları ve cron görevleri hakkında notlar
Komut dosyanızı başlatmak için crontab kullanıyorsanız, yerel görüntüleme veya çıktı hizmetleri istemek için export DISPLAY =: 0 komutunu kullanmanız gerekir. Örneğin, /home/vivek/scripts/monitor.stock.sh'yi çağırmak için zenity aracını kullanın:
@hourly DISPLAY =: 0.0 /home/vivek/scripts/monitor.stock.sh