Fehler im Script (while-Schleife)

M

monsterherz

Grünschnabel
halli,hallo
ich studiere gerade ein Buch unter anderem über Scripting. Habe ein Beispiel-Script angelegt. Ausführbar gemacht:
Code:
#!/bin/bash
value=""
while ["$value"!="ende"];
do clear
echo "benutzer: zeigt eingeloggten user"
echo "prozesse: zeigt laufende prozesse"
echo "ende: beendet das script"
echo "Ihre Auswahl:"
read value
if ["$value"="benutzer"]; then
who
elif ["$value"="prozesse"];then
ps
elif ["$value"="ende"];then
echo 'ahoi'
else 
echo "keine unterstützung"
fi
echo "bitte enter drücken"
read garbage
done
Leider bekomm ich einen Fehler:

schlepptop uebungen # ./menu.sh
./menu.sh: line 3: [!=ende]: command not found


Versteh ich nicht... - wer kann mir das mal erklären?
dank euch
monsterherz
 
Aus

Code:
while ["$value"!="ende"];

mach

Code:
while [ "$value" != "ende" ];

Die Leerzeichen sind wichtig. Das ; markiert einen Zeilenumbruch und ist an dieser Stelle überflüssig, fehlerhaft ist es aber nicht.
 
Hallo,

so geht's wohl:

Code:
#!/bin/bash
value=""
while [ "$value" != "ende" ] ;
do 
    clear
    echo "benutzer: zeigt eingeloggten user"
    echo "prozesse: zeigt laufende prozesse"
    echo "ende: beendet das script"
    echo "Ihre Auswahl:"
    read value
    if [ "$value" = "benutzer" ]; 
    then
        who
    elif [ "$value" = "prozesse" ];
    then
        ps
    elif [ "$value" = "ende" ];
    then
        echo 'ahoi'
    else 
        echo "keine unterstützung"
    fi
    echo "bitte enter drücken"
    read garbage
done

Gib Dir selbst eine Chance, Deine Skripte zu verstehen und menschenlesbar zu halten und verwende Einrückungen.
Und gib der Shell eine Chance, die Variablen von ihren Werten zu unterscheiden und verwende Leerzeichen.

Gruß
 
dank euch. Alles klar.
@phrenicus
Die Schreibweise kommt sicher im Laufe der Zeit. Da hat jeder sein eigenes Ding. Wie der ewige Streit : vi oder emacs... ;)

aber hier noch was anderes:

er führt immer #ps aus, egal welches value ich wähle:

Code:
benutzer: zeigt eingeloggten user
prozesse: zeigt laufende prozesse
ende: beendet das script
Ihre Auswahl:
benutzer
root     tty1         2006-06-15 15:04
michi    tty2         2006-06-15 15:04
michi    pts/0        2006-06-15 15:04 (:0.0)
michi    pts/1        2006-06-15 19:14 (:0.0)
bitte enter drücken


wieso denn das jetzt? :think:
 
o.k. : ich halt den Schnabel...
er führt immer who aus. :devil:
Code:
benutzer: zeigt eingeloggten user
prozesse: zeigt laufende prozesse
ende: beendet das script
Ihre Auswahl:
prozesse
root     tty1         2006-06-15 15:04
michi    tty2         2006-06-15 15:04
michi    pts/0        2006-06-15 15:04 (:0.0)
michi    pts/1        2006-06-15 21:45 (:0.0)
bitte enter drücken

benutzer: zeigt eingeloggten user
prozesse: zeigt laufende prozesse
ende: beendet das script
Ihre Auswahl:
ende
root     tty1         2006-06-15 15:04
michi    tty2         2006-06-15 15:04
michi    pts/0        2006-06-15 15:04 (:0.0)
michi    pts/1        2006-06-15 21:45 (:0.0)
bitte enter drücken
Wieder Verständnisfrage meinerseits? Oder stimmt was nicht?
 
Code:
benutzer: zeigt eingeloggten user
prozesse: zeigt laufende prozesse
ende: beendet das script
Ihre Auswahl:
prozesse
  PID  TT  STAT      TIME COMMAND
  668  p0  Ss     0:00.06 /usr/local/bin/bash
 5603  p0  R+     0:00.00 ps
bitte enter drücken

benutzer: zeigt eingeloggten user
prozesse: zeigt laufende prozesse
ende: beendet das script
Ihre Auswahl:
ende
ahoi
bitte enter drücken

Hab den überarbeiten Code von phrenicus genommen. Funktioniert normal.

Gruss, Xanti
 
monsterherz:

Bei mir nicht:

majestix:~ # /tmp/blubb
benutzer: zeigt eingeloggten user
prozesse: zeigt laufende prozesse
ende: beendet das script
Ihre Auswahl:
benutzer
phrenicus :0 May 23 16:13 (console)
phrenicus pts/1 Jun 15 12:26
phrenicus pts/2 Jun 10 13:31
phrenicus pts/3 Jun 15 12:13
phrenicus pts/4 Jun 12 10:44
phrenicus pts/5 Jun 13 10:01
bitte enter drücken

benutzer: zeigt eingeloggten user
prozesse: zeigt laufende prozesse
ende: beendet das script
Ihre Auswahl:
prozesse
PID TTY TIME CMD
21274 pts/1 00:00:00 su
21277 pts/1 00:00:00 bash
21302 pts/1 00:00:00 blubb
21309 pts/1 00:00:00 ps
bitte enter drücken

benutzer: zeigt eingeloggten user
prozesse: zeigt laufende prozesse
ende: beendet das script
Ihre Auswahl:
ende
ahoi
bitte enter drücken

majestix:~ #

Ich habe das Skript so per Cut&Paste übernommen, wie ich es gepostet habe.

Gruß.......
 
benutzer: zeigt eingeloggten user
prozesse: zeigt laufende prozesse
ende: beendet das script
Ihre Auswahl:
prozesse
PID TTY TIME CMD
13011 pts/0 00:00:00 bash
13033 pts/0 00:00:00 sh
13039 pts/0 00:00:00 ps
bitte enter drücken

Bei mir gehts bestens - hab auch das Script von phrenicus übernommen.
 
@Monsterherz:

Bei Auswahlmöglichkeiten sieht ein case-Konstrukt IMHO wesentlich schöner aus als diese unleserlichen if(bla == blub) then....
 

Ähnliche Themen

Problem mit HSPA+ Modem Huawei E353 - Installation unmöglich?

Problem bei autostart / Ausführung mit meinem SH-Script

Doppelte Dateien löschen.

Bash - Problem mit verschachtelten Schleifen

mein script "ncprof" -> verbesserungsvorschläge

Zurück
Oben