"Problem pięciu filozofów" syntax error unexpected.

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
Gourry
Piegowaty Guziec
Piegowaty Guziec
Posty: 2
Rejestracja: 19 cze 2011, 18:33
Środowisko graficzne: GNOME
Architektura: x86

"Problem pięciu filozofów" syntax error unexpected.

Post autor: Gourry »

Witam.
Jestem nowym uzytkownikiem tego forum jak i świeży w unixach. Mam za zadanie napisać skrypt w bashu i tutaj jest mój problem
w 15 linijce mam bład:
syntax error near unexpected token `else'
tutaj kod
#!/bin/bash
posilek=0

while ($posilek -e 0)
do
if ($1 -e 1) then
if [ flock -n plik$(($1+4)) ] then
flock -s plik$(($1+4)) echo "Widelec 5 podniesiony przez filozofa $1"
flock -s plik$1 echo "Widelec 1 podniesiony przez filozofa $1"
sleep 2
posilek=1
flock -u plik$(($1+4)) echo "Widelec 5 odlozony przez filozofa $1"
flock -u plik$1 echo "Widelec 1 odlozony przez filozofa $1"
echo "Filozof $1 zjadl posilek"
else
echo "Filozof $1 duma"
sleep 4
fi
else
if [ flock -n plik$(($1-1)) ] then
flock -s plik$(($1-1)) echo "Widelec `(($1-1))` podniesiony przez filozofa $1"
flock -s plik$1 echo "Widelec $1 podniesiony przez filozofa $1"
sleep 2
posilek=1
flock -u plik$(($1-1)) echo "Widelec `(($1-1))` odlozony przez filozofa $1"
flock -u plik$1 echo "Widelec $1 odlozony przez filozofa $1"
echo "Filozof $1 zjadl posilek"
else
echo "Filozof $1 duma"
sleep 4
fi
fi
done
Awatar użytkownika
igotit4free
Przyjaciel
Przyjaciel
Posty: 6453
Rejestracja: 29 paź 2008, 22:51
Płeć: Mężczyzna
Architektura: x86_64
Lokalizacja: KRK

Re: "Problem pięciu filozofów" syntax error unexpected.

Post autor: igotit4free »

Wątek przywrócony z Otchłani, chodzi o hmm ... ciekawośc świata i rozwój intelektualny a nie ordynarne odrabianie lekcji.
Słowo PROBLEM jak najbardziej na miejscu.;)
Windows 10 @ GA-P67A-D3-B3, i3-2100 3.10GHz, 8GB RAM, Gigabyte HD6850 1GB RAM
Android 7.0 @ Motorola Moto G4+
Gourry
Piegowaty Guziec
Piegowaty Guziec
Posty: 2
Rejestracja: 19 cze 2011, 18:33
Środowisko graficzne: GNOME
Architektura: x86

Re: "Problem pięciu filozofów" syntax error unexpected.

Post autor: Gourry »

tak więc syntax sam zniwelowałem poprzez zamiane komendy w ifie ale teraz niestety program działa tylko dla 1 filozofa po czym się zacina nic nie robiąc:
#!/bin/bash
posilek=0

while [ $posilek = 0 ];
do
if [ $1 = 1 ]; then
m=$1+4
if [ -r plik$m ]; then
if [ -r plik$1 ]; then
flock -s plik$m echo "Widelec 5 podniesiony przez filozofa $1"
flock -s plik$1 echo "Widelec 1 podniesiony przez filozofa $1"
sleep 2
posilek=1
flock -u plik$m echo "Widelec 5 odlozony przez filozofa $1"
flock -u plik$1 echo "Widelec 1 odlozony przez filozofa $1"
echo "Filozof $1 zjadl posilek"
else
echo "Filozof $1 duma"
sleep 4
fi
fi
else
k=$1-1
if [ -r plik$k ]; then
if [ -r plik$1 ]; then
flock -s plik$k echo "Widelec $k podniesiony przez filozofa $1"
flock -s plik$1 echo "Widelec $1 podniesiony przez filozofa $1"
sleep 2
posilek=1
flock -u plik$k echo "Widelec $k odlozony przez filozofa $1"
flock -u plik$1 echo "Widelec $1 odlozony przez filozofa $1"
echo "Filozof $1 zjadl posilek"
else
echo "Filozof $1 duma"
sleep 4
fi
fi
fi
done
nie chodiz mi o podanie rozwiązania na tacy a wskazaniu błędu
Awatar użytkownika
Dwimenor
Przebojowy Jelonek
Przebojowy Jelonek
Posty: 1260
Rejestracja: 18 mar 2008, 16:14
Płeć: Mężczyzna
Wersja Ubuntu: 13.10
Architektura: x86_64

Re: "Problem pięciu filozofów" syntax error unexpected.

Post autor: Dwimenor »

Zacznij od tego:

Kod: Zaznacz cały

m=$1+4
k=$1-1
Matematykę inaczej się robi ;)

Kod: Zaznacz cały

m=$[1+4]
k=$[1-1]
Dodatkowo uruchom powłokę z debuggerem

Kod: Zaznacz cały

#!/bin/bash -x
To zobaczysz co ci się zacina. Problemu 5 filozofów nie znam, więc specjalnie nie pomogę z działaniem.
Poniższe zdanie jest fałszywe.
Powyższe zdanie jest prawdziwe.
bigfun
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 109
Rejestracja: 20 mar 2011, 19:08
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: GNOME
Architektura: x86
Lokalizacja: Warszawa
Kontakt:

Re: "Problem pięciu filozofów" syntax error unexpected.

Post autor: bigfun »

Implementacja filozofów w bashu to istna masakra ;) Z ciekawości zapytam, czyżby to pomysł doktora TJK z PW? :>

Testowo odpaliłem ten kod, po wcześniejszym utworzeniu plików (plik1 do plik5) i poprawieniu tego, o czym wspomniał Dwimenor, wygląda, że działa. Rozumiem, że powyższy kod odpalany jest mniej więcej tak:

Kod: Zaznacz cały

./filozof.sh 1 &
./filozof.sh 2 &
./filozof.sh 3 &
./filozof.sh 4 &
./filozof.sh 5 & 
Wygląda to nawet sensownie ( z tym, że u mnie pojawia się widelec 0 od czasu do czasu, co chyba nie powinno następować - Twoje widelce są ponumerowane od 1 do 5 ).
"Never argue with idiot. He will drag you down to his level and then beat with experience."

Nie udzielam pomocy poza forum.
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

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