Skocz do zawartości

Case Dokladniej...


Franz

Rekomendowane odpowiedzi

Witam!

 

Mam nastepujacy problem w skrypcie BASH. Na zadane pytanie chce wczytac odpowiedz. Prawidlowa odpowiedz to "y" lub "n", pozostale znaki maja byc ignorowane. Dopiero po napotkaniu "y" lub "n" maja sie wykonac odpowiednie instukcje z CASEa.. oto fragment:

 

echo -n "Zastapic w bazie? (y/n):"

read x

case "$x" in

 

"y")

instrukcje..

... ;;

"n")

instrukcje..

... ;;

 

*) while [ "$x" != y|n ]; do read x

done ;;

esac

 

Help.. :unsure:

Odnośnik do komentarza
Udostępnij na innych stronach

No a na czym polega problem? Bo tego nie napisałeś. Co Ci nie działa? Tzn. domyślam się, że $x != y|n - jak weźmiesz y|n w cudzysłów to pewnie będzie lepiej. Pętlę wywaliłbym poza case tzn. case w pętli a nie pętla w case.

Odnośnik do komentarza
Udostępnij na innych stronach

Problem polega na tym , ze jesli podam odpowiedz inna niz "y" lub "n", to skypt ma mi to lyknac, ew wyrzucic echo "TYLKO y/n".. i czekac na prawidlowa odpowiedz.. czyli podaje np. k,l,m.. a skrypt ma nie robic nic.. dopiero gdy podam "y" lub "n" robi liste komend z CASEa i wychodzi z petli, wykonujac dalsze instrukcje...

 

...

 

echo "Zastapic ? (y/n)"

read x

while [ "$x" != "y|n" ]; do

 

case "$x" in

 

"y") instrukcje.. ;;

 

"n") instrukcje..;;

 

*) echo "Tylko y lub n" ;;

 

esac

 

...

 

Ten wariant niestety tez nie dziala jak powinien... :(

Odnośnik do komentarza
Udostępnij na innych stronach

A nie powinno to wyglądać mniej więcej tak (tylko syntax trzeba poprawić) tak jak to powiedział Waldo case w pętli a nie na odwrót

while (true)

do

echo "Zastapic ? (y/n)"

read x

case "$x" in

"y") instrukcje.. ;;break;

"n") instrukcje..;;break;

*) echo "Tylko y lub n" ;;

done;

Odnośnik do komentarza
Udostępnij na innych stronach

Ten wariant niestety tez nie dziala jak powinien... :(
Jakoś ciężko się nam dogadać, wciąż opisujesz co program ma robić a nie piszesz nic o problemie. CO nie działa? Wróżka ma wolne. Jeśli nie działa, to masz jakieś błędy na konsoli chyba, no nie?

U mnie działa poprawnie. Może dlatego, że zamknąłem pętlę :rolleyes:

 

Odnośnik do komentarza
Udostępnij na innych stronach

echo -n "Zastapic w bazie? (y/n):"

read x

while [ "$x" != "y|n" ]; do #dopoki x rozne od y lub n..

case "$x" in

"y")

echo $b >> plik.csv

break ;;

"n")

echo $a >> plik.csv

break ;;

*)

echo -n "Tylko 'y' lub 'n':"

read x ;;

esac

done

 

Ostateczna wersja ODPORNEGO na bledy fragmentu ktory moze przydac sie wielu podczas wprowadzania danych ;)

 

Pozro :D

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
×
×
  • Dodaj nową pozycję...