Problem mit einem Shell Script...

Status
Für weitere Antworten geschlossen.

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Ich war mir ned sicher wo das reingehören könnte, drum habe ich es mal Offtopic gepostet. Es geht darum, dass ich mir ein Shell Script schreibe, welches Streamripper steuern soll. Ich muss sagen, dass ich keine Leuchte bin was Shell Scripte angeht :D Grundsätzlich funzt das Script aber als ich eine Prüfung der Usereingaben einbauen wollte blieb ich in einer Endlosschleife hängen und ich kann mir einfach nicht erklären warum...
Code:
savePath=""
streamAddr=""

while [ $streamAddr=="" ]
do
 echo "URL des Streams (http://domain.tld:PORT/path):"
 read streamAddr
done
egal was ich eingebe die Bedingung bleibt true. Kann es sein, dass die Prüfung auf einen Leerstring in einem Shellscript so ned funzt??
Folgendes habe ich dann auch mal probiert, aber geklappt hat's auch ned
Code:
savePath=0
streamAddr=0

while [ "$streamAddr"=="0" ]
do
  echo "URL des Streams (http://domain.tld:PORT/path):"
  read streamAddr
done
Hat jemand einen Tipp für mich ?
Danke und Gruss

tobi
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Rich (BBCode):
while [ "$streamAddr" = "" ]

Die [ ] sind das gleiche wie das Kommando test *guck*. Nu siehst, was man alles testen kann.

Ansonsten kann der while auch das Ende einer Datei von allein feststellen, also

<file1 while read a b c
do
echo $a $c $b
done

vielleicht brauchst das ja mal.

itari
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
@itari
Und wiedermal bist du der Retter in der Not :D Dein "guck" hat mir geholfen. Ich hab zwar noch nicht ganz kapiert warum es auf meine Weise nicht ging ;), aber das folgende funzt einwandfrei
Code:
while [ -z $streamAddr ]
Danke und schönen Abend
Gruss

tobi
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Mach noch Anführungszeichen um die Variable, sonst geht es nicht gut, wenn die Variable ganz leer ist, denn dann stünde da

while [ -z ]

und das ist ja syntaktisch falsch. Also immer bei Shell-Variablen schreiben:

while [ -z "$streamAddr" ] oder halt: while test -z "$streamAddr"

itari
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Mach noch Anführungszeichen um die Variable, sonst geht es nicht gut, wenn die Variable ganz leer ist, denn dann stünde da...
Ganz leer kann sie nicht sein, weil ich sie weiter oben im Code initialisiert habe mit einem Léerstring ;) Darum kriege ich auch keine Fehlermeldung bei einer leeren Eingabe. Aber danke für den Tipp, habe mir das hinter die Ohren geschrieben. Also Shellscripte sind was feines aber für mich als PHP-Programmierer einfach nicht wirklich logisch, aber da komme ich bestimmt noch mehr rein.

Gruss

tobi
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
@jahlives,

vielleicht hilft dir die Vorstellung, dass die Shell keine Programmiersprache ist, sondern eine reine Skript-Sprache. Zum Beispiel sind die von dir verwendeten 'Variablen' keine Variablen, sondern nur Textplatzhalter, die gegen den Inhalt substituriert werden. Wenn du also a="" machst, dann wird echo $a einfach zu echo und nicht zu echo ""

Ähnlich ist es mit den Bedingungen. Es wird ein Kommando evaluiert, d.h. ausgeführt und der exit-Status wird als true/false interpretiert (true=0, false<>0), so dass du überall in if, while usw. statt Bedingungen einfach Kommandos hinsetzen kannst.

Also Shellscripte sind was feines aber für mich als PHP-Programmierer einfach nicht wirklich logisch

Shell-Skripte, C, C++, Java, Pascal, PHP, JavaScript, selbst VB und Ruby sowie Python sind noch sehr eng miteinander verwand. Schau dir mal Perl, awk, Smaltalk, Lisp, Prolog, Forth, APL, Brainfuck an, dann siehst, dass es noch ganz andere Arten von Programmiersprachen gibt, die nicht schlechter oder besser sind, einfach nur anders. Und das ist ja auch gut so, dass es eine Vielzahl von Arten gibt, sich mit dem Computer zu unterhalten und zu programmieren. Es wäre ja auch irgendwann langweilig, wenn es nur 3 Musikstücke gäbe oder nur 5 Computerspiele oder nur 1 Buch :D

itari
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat