Logo


Kurs programowania w Bash'u

Nowości       Porady       Księga      

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.

Składnia:

--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.

Składnia:

--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.

Składnia:

--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.

Składnia:

--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.

Składnia:

--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:

Składnia:

--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ę.

Składnia:

--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.


Składnia:

--fselect <filepath><directory> <height> <width>

Przykład:

dialog --fselect /win2/bash/ 10 40 2>sciezka.txt




Po kilku "podróżach" po katalogach zatwierdziłem sciezkę:

/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.

Składnia:

--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ół.

Ostatnio dodano

O stronie

Stronę najlepiej oglądać w rozdzielczości 1024x768. Strona optymalizowana dla przeglądarki Mozilla.

Prośba

Jeśli chciałbyś coś zmienić lub uważasz że czegoś brakuje pisz. Odpiszę na każdy list.

Subskrypcja

Jeśli chcesz być informowany o nowościach na stronie wpisz tu swój e-mail i kliknij Wyślij.

O mnie

O autorze
Autorem kursu jest Mariusz Majerowski
Ostatnia aktualizacja: 23 VI 2004.