Obecnie piszę mój trzeci skrypt powłoki i napotkałem problem. Oto mój skrypt do tej pory:
#!/bin/bash
echo "choose one of the following options : \
1) display all current users \
2) list all files \
3) show calendar \
4) exit script"
while read
do
case in
1) who;;
2) ls -a;;
3) cal;;
4) exit;;
esac
done
kiedy próbuję uruchomić skrypt, mówi to:
line2 : unexpected EOF while looking for matching '"'
line14 : syntax error: unexpected end of file.
Co ja robię źle?
shell
shell-script
Swifty124
źródło
źródło
Odpowiedzi:
Problem polega na tym, że w twoim
case
stwierdzeniu brakuje tematu - zmiennej, którą powinien ocenić. Dlatego prawdopodobnie chcesz czegoś takiego:Tutaj
case
używana jest zmienna domyślna,$REPLY
któraread
wypełnia się, gdy nie ma żadnych nazw zmiennych (zobaczhelp read
szczegóły).Zwróć także uwagę na zmiany:
printf
służy do wyświetlania monitu w każdej rundzie (i nie dodaje nowej linii),cat
służy do drukowania instrukcji w kilku wierszach, aby się nie zawijały i były łatwiejsze do odczytania.źródło
Nie zapominajmy
select
:źródło
Na początek spróbujmy jednego przypadku. Użyję
read -p
do odczytu danych wejściowych użytkownika do zmiennej,opt
a następnie instrukcji case jak poniżej.Powyższy skrypt działa dobrze i teraz uważam, że musisz go mieć w pętli, abyś mógł czytać dane wejściowe użytkownika, dopóki użytkownik nie naciśnie opcji 4.
Możemy to zrobić za pomocą
while
pętli, jak poniżej. Ustawiam zmiennąopt
o wartości początkowej na 0. Teraz iteruję wwhile
pętli, dopókiopt
zmienna ma wartość równą 0 (dlatego zerujęopt
zmienną jako 0 na końcucase
instrukcji).źródło
Osobiście umieściłem „while” na początku kodu. Jeśli następnie zastosujesz się do
:
niego, pozwoli ci on zapętlać tyle razy, ile chcesz. Tak bym to napisał.następnie kontynuuj pytania i kończ na
źródło