• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

While i if w bashu

0 głosów
120 wizyt
pytanie zadane 21 czerwca 2019 w Systemy operacyjne, programy przez harryna Gaduła (3,180 p.)

Zaraz mnie coś rozniesie. Co znowu robię nie tak? 

Chciałbym zrobić menu, ale w pętli. I zamiast wyświetlać się menu i czekać na wybranie opcji przez użytkownika to ta pętla działa przez cały czas. 

 

 

#!/bin/bash

#menu

loop=1
while [ $loop == 1 ] ; do
		echo "********************************************************"
		echo "*  1 - opcja1                         *"
		echo "*  2 - opcja2                          *"
		echo "*  3 - opcja3                  *"
		echo "*  4 - Wyście                                                         *"
		echo "********************************************************"	
		

		read opt

		if [ $opt == 1 ]; then
			echo "opcja1 "
			read limit
			echo $limit
			clear
			
		elif [ $opt == 2 ]; then
			echo "opcja2"
			
		elif [ $opt == 3 ]; then
				echo "opcja 3"
				
		elif [ $opt == 4 ]; then
			echo "Czy na pewno chcesz wyjść Y/N?"
			read exit
			
			if [ $exit == "Y" || "y" ]; then
			$loop=0
			
		else
			echo "Coś poszło nie tak. Spróbuj jeszzcze raz."
		fi
		
 
done 

Zgłasza mi cały czas problem z tym done. 

komentarz 21 czerwca 2019 przez Patrycjerz Mędrzec (192,440 p.)
Jaki błąd ci zgłasza?

Tak w ogóle Bash nie jest najlepszym językiem do pisania skryptów, ze względu na jego toporność. Lepiej użyć np. Pythona, który jest bezpieczniejszy i łatwiej się go debugguje.
komentarz 21 czerwca 2019 przez harryna Gaduła (3,180 p.)
Wiem, że lepiej. Z Pythonem nie mam problemów. Ale to jest skrypt na zaliczenie i muszę go napisać w Bashu właśnie

2 odpowiedzi

+1 głos
odpowiedź 21 czerwca 2019 przez RafalS VIP (122,860 p.)
wybrane 21 czerwca 2019 przez harryna
 
Najlepsza

Jeśli nie musisz to nie używaj basha. Python sprawdzi się o wiele lepiej. Wystarczy dodać pythonowy shebang i skrypt uruchamia się tak samo jak bashowy. A chyba ciężko dzisiaj o linuxa bez pythona.

#!/usr/bin/env python3

Ale do rzeczy, co bylo nie tak:

if [ $exit == "Y" || "y" ]; then
            $loop=0
             
        else

brakuje fi po ifie. I w tym samym ifie nie możesz zrobić tak: 

[ $exit == "Y" || "y" ]

są dwie opcje:

[ $exit == "Y" ] || [ $exit == "y" ]
# lub
[ $exit == "Y" -o $exit == "y" ]

lub operator podwójnych nawiasów, który jest troszkę inteligentniejszy:

[[ $exit == "Y" || $exit == "y" ]]

 

0 głosów
odpowiedź 21 czerwca 2019 przez j23 Mędrzec (169,300 p.)

Brakuje fi przed done :)

Gdybyś poprawnie sformatował kod, to byś zauważył błąd.

Podobne pytania

0 głosów
1 odpowiedź 70 wizyt
+2 głosów
1 odpowiedź 54 wizyt
pytanie zadane 18 kwietnia 2021 w Systemy operacyjne, programy przez szylvvia Początkujący (300 p.)
0 głosów
0 odpowiedzi 59 wizyt
pytanie zadane 21 czerwca 2021 w Nasze projekty przez mattaha Użytkownik (690 p.)

86,448 zapytań

135,207 odpowiedzi

300,348 komentarzy

57,196 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...