[SOLVED][BASH] Pętla while dla dialog --yesno jak poprawnie skonstruować?

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
saygon
Sędziwy Jeż
Sędziwy Jeż
Posty: 33
Rejestracja: 23 wrz 2009, 11:09
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Inne
Architektura: x86_64
Lokalizacja: Hamburg
Kontakt:

[SOLVED][BASH] Pętla while dla dialog --yesno jak poprawnie skonstruować?

Post autor: saygon »

Zależy mi na tym aby pętla odczytywała stan odpowiedzi użytkownika po czym kończyła swoje działanie lub kontynuowała swoje działanie jeśli warunek nie będzie spełniony.
Napisałem coś takiego:

Kod: Zaznacz cały

while [$odp != $0]; do
	prog_dir=$(dialog --stdout --title "Where is $program?" --fselect / 14 48)
	odp=$(dialog --stdout --title "Question" --yesno "Are you sure  $prog_dir ?" 14 48)
done
Pętla nawet nie zaczyna swojego działania i przechodzi do dalszej części skryptu.
Poradźcie mi proszę co przeoczyłem lub co napisałem źle.

Edit:

Nieco zmodyfikowałem kod, kod w środku pętli uruchamia się ale mimo to pętla nie działa prawidłowo, tzn. ciągle wznawia swoje działanie:

Kod: Zaznacz cały

until [$? != true]; do
	prog_dir=$(dialog --stdout --title "Where is $program?" --fselect / 14 48)
	dialog --stdout --title "Question" --yesno "Are you sure $prog_dir ?" 14 48
done
ten wariant również nie przynosi oczekiwanych rezultatów:

Kod: Zaznacz cały

until [$odp != true]; do
	prog_dir=$(dialog --stdout --title "Where is $program?" --fselect / 14 48)
	odp=$(dialog --stdout --title "Question" --yesno "Are you sure $prog_dir ?" 14 48)
done
Ostatnio zmieniony 23 lut 2015, 14:08 przez saygon, łącznie zmieniany 3 razy.
Awatar użytkownika
jacekalex
Gibki Gibbon
Gibki Gibbon
Posty: 4704
Rejestracja: 17 cze 2007, 02:54
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: MATE
Architektura: x86_64

Re: [BASH] Pętla while dla dialog --yesno jak poprawnie skonstruować?

Post autor: jacekalex »

Kod: Zaznacz cały

while [[ $odp != $0 ]]; do    prog_dir=$(dialog --stdout --title "Where is $program?" --fselect / 14 48);    odp=$(dialog --stdout --title "Question" --yesno "Are you sure  $prog_dir ?" 14 48); done
O to chodzi?
Problemy rozwiązujemy na forum nie na PW -> Niech inni na tym skorzystają.
Komputer jest jak klimatyzacja - gdy otworzysz okna, robi się bezużyteczny...
Linux User #499936
Inny OS: Gentoo Linux :)
saygon
Sędziwy Jeż
Sędziwy Jeż
Posty: 33
Rejestracja: 23 wrz 2009, 11:09
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Inne
Architektura: x86_64
Lokalizacja: Hamburg
Kontakt:

Re: [BASH] Pętla while dla dialog --yesno jak poprawnie skonstruować?

Post autor: saygon »

@jacekalex

Pętla wykonuje się ale wznawia swoje działanie mimo iż wartość jest true (0)
Awatar użytkownika
jacekalex
Gibki Gibbon
Gibki Gibbon
Posty: 4704
Rejestracja: 17 cze 2007, 02:54
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: MATE
Architektura: x86_64

Re: [BASH] Pętla while dla dialog --yesno jak poprawnie skonstruować?

Post autor: jacekalex »

Musisz tam gdzieś wsadzić warunek if sprawdzający wartość, i odpalający polecenie wyjścia z pętli - break, kiedy jest spełniony.

Tu masz przykład:
http://stackoverflow.com/questions/1848 ... -break-out

Tu masz przykład działający na 150%:

Kod: Zaznacz cały

seq 1 100000 | while read numer; do  if [[ $numer == 5 ]]; then echo "Numer $numer wyłączył petlę" ;  break; else echo "Numer $numer nie wyłącza pętli"; fi; done;
Problemy rozwiązujemy na forum nie na PW -> Niech inni na tym skorzystają.
Komputer jest jak klimatyzacja - gdy otworzysz okna, robi się bezużyteczny...
Linux User #499936
Inny OS: Gentoo Linux :)
saygon
Sędziwy Jeż
Sędziwy Jeż
Posty: 33
Rejestracja: 23 wrz 2009, 11:09
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Inne
Architektura: x86_64
Lokalizacja: Hamburg
Kontakt:

Re: [BASH] Pętla while dla dialog --yesno jak poprawnie skonstruować?

Post autor: saygon »

Owszem przykład działa bardzo dobrze ale kod po ponownym zmodyfikowaniu nadal nie działa tak jak powinien, tym razem wyświetla się jedynie okno potwierdzenia.

-- poniedziałek, 23 lut 2015, 14:08 --

Po dwóch dniach napisałem w końcu kod który działa poprawnie, problem rozwiązałem funkcjami. Projekt może ruszyć dalej :D

Kod: Zaznacz cały

ipd() {
prog=$(dialog --stdout --title "Where is installed program?" --fselect / 14 48)
yesno 
}

yesno() {
dialog --stdout --title "Question" --yesno "Are you sure $prog?" 14 48
case $? in
 0)
	;;
 1)
	clear
	ipd
	;;	 
esac
}
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 0 gości