2016-06-02 9 views
1

Hallo Ich versuche, den folgenden Code in Unix auszuführen, aber das Skript wird in Endlosschleife. Obwohl der Code perfekt sein aussieht, bin ich nicht in der Lage, den Fehler zu debuggen:Unix While-Loop-Shell-Skript

case "$anymore" in 

statt:

answer=y 
while [ "$answer" = "y" ] 
do 
echo " Enter the word and filename" 
read pname flname 
grep "$pname" "$flname" > newlist 
echo " Enter any more string to be searched (y/n)? " 
read anymore 
case anymore in 
y) answer=y ;; 
n) answer=n ;; 
esac 
done 
+1

Ihnen fehlt das Dollarzeichen auf der Variablen. 'case $ among' pro' case again', welches nur die statische Zeichenkette "more" untersucht. Abstimmung zum Schließen als einfacher Tippfehler. – tripleee

+0

auch "lesen" ohne '-r" wird Backslashes mangle. Sollte hier sowieso kein Thema sein. – sjsam

Antwort

3

Der Ausdruck nach case sollte der Wert der Variablen in der vorherige Zeile gelesen wird

case anymore in 

Update:

Wie @Jens erwähnt, können Sie hier die doppelte Anführungszeichen der Variablen weglassen, da keine Wortaufteilung bei Erweiterungen innerhalb case (von http://mywiki.wooledge.org/WordSplitting#line-106) durchgeführt wird.

+0

Vielen Dank Kenavoz ... Es ist schade von meiner Seite .. ich bin in der Lernphase von Unix Shell Scripting ... – user3134805

+0

Ich denke, Sie wollten sagen, dass der Ausdruck nach "Fall" ist ** nicht ** eine Variable . In Ihrer Lösung ist es eine variable Erweiterung, also ein Wert. Und Sie können '$ mehr 'in Anführungszeichen setzen, um Fehler zu vermeiden. –

+0

Danke Julien..als von Kenavoz und Sie, der Code funktioniert gut mit $ mehr .. – user3134805