Dialog czyli okna dialogowe Do tej pory do pobierania i wyświetlania informacji używaliśmy poleceń read i echo. Okazuje się, że można dokonać tego w efektowniejszy wizualnie sposób. Czyż nie przyjemnie było by oglądać różne komunikaty tak jak na screenie poniżej? Prawda że ładne? Do tego robienie takich okienek jest bardzo proste. Wystarczy poniższa instrukcja: dialog --msgbox "Witaj Uzytkowniku. \n\nnacisnij OK aby kontynuowac." 7 40 Oznaczenia: dialog - wywołanie programu dialog. -- msgbox - wybranie okna MessageBox służącego do wyświetlania informacji. znaki \n\n to znane nam już przejście do nowego wiersza 7 40 to kolejno: wysokość i szerokość okna dialogowego. Jeśli nie mamy czasu kombinować możemy wpisać 0 0 i wtedy okno samo dopasuje się do tekstu (Jednak to nie zawsze działa prawidłowo). Możemy również dodać tytuł pojawiający się na pasku tytułowym poprzez dodanie parametru --title: dialog --title "Okno z wiadomoscia" --msgbox "\nwitaj Uzytkowniku. \n\nnacisnij OK aby kontynuowac." 7 40
Napis "Powitanie" znajdujący się w tle na górze ekranu możemy wstawić używając opcji - -backtitle: dialog --title "Okno z wiadomoscia" --backtitle "Powitanie" --msgbox "\nwitaj Uzytkowniku. \n\nnacisnij OK aby kontynuowac." 9 40 Opcja --clear czyści okno po zamkonczeniu: dialog --clear --msgbox "Witaj Uzytkowniku. \n\nnacisnij OK aby kontynuowac." 7 40 --Infobox Jeśli nie potrzebujemy potwerdzania przyciskiem OK stosujemy ono informacyjne infobox Składnia jest taka sama jak przy MsgBox'ie: --infobox <text> <height> <width> dialog --title "Okno info" --infobox "Informacja" 6 30
Lista wyboru okien dialogowych (wyświetlana poleceniem: dialog) --calendar <text> <height> <width> <day> <month> <year> --checklist <text> <height> <width> <list height> <tag1> <item1>... --fselect <height> <width> --gauge <text> <height> <width> [<percent>] --infobox <text> <height> <width> --inputbox <text> <height> <width> [<init>] --menu <text> <height> <width> <menu height> <tag1> <item1>... --msgbox <text> <height> <width> --passwordbox <text> <height> <width> [<init>] --radiolist <text> <height> <width> <list height> <tag1> <item1> <status1>... -- checklist <tekst> <wysokość> <szerokość> <wysokość menu> <nr opcji> <nazwa opcji><status>... --tailbox <height> <width> --tailboxbg <height> <width> --textbox <height> <width> --timebox <text> <height> <width> <hour> <minute> <second> --yesno <text> <height> <width> Wyświetlanie zawartości plików --textbox Opcja --textbox wyświetla zawartość pliku. --textbox <plik> <wysokosc> <szerokosc> Spróbujemy wyświetlić plik zawierający kalendarz na bieżący miesiąc. Najpierw tworzymy plik z kalendarzem. cal > cal.txt następnie wydajemy polecenie wyświetlające plik tekstowy: dialog --title "Oto kalendarz" --textbox "cal.txt" 0 0 Okno samo dopasuje się do rozmiaru kalendarza.
Kalendarz czyli --calendar dialog posiada nawet wbudowaną opcję --calendar, która wyświetla zaznaczony dzień miesiąca, oraz pozwala wybrać strzałkami (i zatwierdzić) dowolną datę. Data ta zostanie zapisana w pliku określonym na końcu polecenia. --calendar <text> <height> <width> <day> <month> <year> Przy wywołaniu należy podać dokładną datę. Ja wpisałem swoje urodziny: dialog --calendar " Kalendarz" 0 0 29 1 1982 2>data.txt Pomiędzy poszczególnymi kolumnami przechodzimy używając bocznych klawiszy kursora, natomiast dni, miesiące oraz lata wybieramy strzałkami: góra, dół. Po zatwierdzeniu w pliku data.txt znajdzie się ciąg 29/01/1982.
InputBox czyli wprowadzanie danych Okno InputBoxa można porównać do okienka formularza na stronie www. Tak samo umożliwia wpisywanie i zatwierdzanie tekstu. --inputbox <text> <height> <width> [<init>] Zbudujemy sobie okienko do wpisania Imienia: dialog --title "Wprowadzanie danych" --inputbox "Podaj swoje imie" 8 40 Wszytsko ok, wpisuje ale gdzie są zapisywane dane? Otórz na końcu polecenia musimy dodać jeszcze przekierowanie do pliku wyjściowego: dialog --title "Wprowadzanie danych" --inputbox "Podaj swoje imie" 8 40 2> imiona.txt teraz zaglądając do pliku imiona.txt zobaczymy imię które wpisaliśmy w formularzu: echo "Wpisales `cat imiona.txt' " Inputbox pozwala wprowadzić wartość domyślną do okna. Dopisuje się ją po podaniu wymiarów: dialog --title "Wprowadzanie danych" --inputbox "Podaj swoje imie" 8 40 "Ania" 2> imiona.txt
Wprowadzanie haseł: --passwordbox Okno passwordbox jak się pewnie domyślacie jest to okienko do wpisywania hasła. Wygląda tak samo jak inputbox, jednak to co wpisujemy jest niewidoczne. --passwordbox <text> <height> <width> [<init>] dialog --title "Wprowadzanie hasla" --passwordbox "Podaj hasło" 8 40 2> haslo.txt Wartość domyślną wprowadza się tak samo jak w InputBoxie czyli: dialog --title "Wprowadzanie hasla" --passwordbox "Podaj hasło" 8 40 "Tajne" 2> haslo.txt
--YesNo Jak nazwa wskazuje okno pozwoli nam wybrać przycisk TAK lub NIE. --yesno <text> <height> <width> dialog --yesno "Czy dialog jest OK?" 8 30 Nasz wybór kryje się w zmiennej $?. Po wybraniu opcji TAK kodem wyjścia będzie 0, wybranie opcji NIE wprowadzi do zmiennej kod 1 a wciśnięcie przycisku Escape da nam kod równy 255. Kod wyjścia wyświetlimy następująco: echo $? Przykładowy skrypt korzystający z --yesno wygląda następująco: #!/bin/bash dialog --yesno "Czy wyswietlic pliki z biezacego katalogu?" 8 40 wybor=$? case $wybor in "0" ) ls ;; "1") echo "Wybrales NIE" ;; "255") echo "Wcisnales Escape" ;; esac
Menu wyboru: --menu --menu <tekst> <wysokość> <szerokość> <wysokość menu> <nr opcji> <nazwa opcji>... Dzięki menu zbudujemy sobie prostą ankietę: dialog --menu "Jakiego systemu używasz?" 10 30 3 1 Windows 2 Linux 3 Inny 2> system.txt W pliku system.txt znajdzie się numer odpowiedzi którą wybraliśmy, czyli przy wyborze Linuksa polecenie: cat system.txt wyświetli: 2.
Lista opcji --checklist Lista opcji CheckList pozwala wybrać kilka opcji naraz za pomocą stawianych krzyżyków: --checklist <tekst> <wysokość> <szerokość> <wysokość menu> <nr opcji> <nazwa opcji><status>... dialog --checklist "Jakiego systemu używasz?" 10 30 3 1 Windows on 2 Linux off 3 Inny off 2> system.txt Windows on - oznacza że opcja Windows będzie domyślnie zaznaczona krzyżykiem, natomiast Linux oraz Inny mają trybut off więc będą wyświetlane bez zaznaczenia. Po wybraniu Windowsa oraz Linuksa w pliku system.txt znajdzie się ciąg: "1" "2". Dodatkowa opcja --separate-output produkuje wyjście w osobnych liniach, bez cytowania. Ułatwia to przetwarzanie przez inny program.
Lista opcji --radiolist Lista opcji RadioList pozwala wybrać tylko jedną opcję. --radiolist <tekst> <wysokość> <szerokość> <wysokość menu> <nr opcji> <nazwa opcji><status>... dialog --radiolist "Jakiego systemu używasz?" 10 30 3 1 Windows off 2 Linux off 3 Inny off 2> system.txt Tu również możemy dać domyślny wybór ustawiając parametr status na on (jednak musimy pamiętać żeby reszta była ustawiona na off) dialog --radiolist "Jakiego systemu używasz?" 10 30 3 1 Windows off 2 Linux on 3 Inny off 2> system.txt Po wybraniu Linuksa, w pliku system.txt znajdzie się liczba 2.
fselect Opcja fselect pomaga wybrać określony plik w drzewie katalogów. Katalog i plik wybieramy strzałkami i spacją lub bezpośrednio wpisując scieżkę w dolnej części okna, jednocześnie obserwując zawartości katalogów przez które przechodzimy. --fselect <filepath><directory> <height> <width> Przykład: dialog --fselect /win2/bash/ 10 40 2>sciezka.txt Po kilku "podróżach" po katalogach zatwierdziłem ścieżkę: /home/mariusz/desktop/index.html i właśnie ona znalazła się w pliku sciezka.txt.
--gauge czyli pasek postępu Opcja --gauge buduje na dole ekranu pasek postępu. Dane bierze ze standardowego wejścia. --gauge <text> <height> <width> [ <procent>] Pasek postępu potrzebuje stale dopływających danych więc jeśli napiszemy tylko: dialog --gauge "Postep" 8 40 to program będzie oczekiwał na nie w nieskończoność i będziemy mmusieli przerwać jego działanie klawiszami CTRL+C. Przykład: Mamy skrypt o nazwie postep.sh, który generuje liczby od 0 do 100: #!/bin/bash licznik=0 while [ $licznik -lt 100 ] do licznik=$[licznik+1 ] echo $licznik done Teraz uruchamiamy nasz skrypt przepuszczając wyniki przez dialog --gauge: bash postep.sh dialog --gauge "Postep" 8 40 Oczywiście moglibyśmy również wpisać dialog bezpośrednio do pliku: #!/bin/bash licznik=0 while [ $licznik -lt 100 ] do licznik=$[ licznik+1 ] echo $licznik dialog --gauge "Postep" 8 40 done
--timebox Opcja --timebox służy do ustawiania godziny. Składnia jest następująca: --timebox <text> <height> <width> <hour> <minute> <second> Przykład: dialog --clear --timebox "Ustaw zegar" 3 8 23 01 59 2> godz.txt Sterowanie: bocznymi strzałkami wybieramy komórkę, natomiast godzinę ustawiamy wciskając góra/dół.