2016-06-02 3 views
1

Привет Я пытаюсь выполнить приведенный ниже код в unix, но скрипт идет в бесконечном цикле. Хотя код выглядит, чтобы быть совершенным, я не смог отладить ошибку:Сценарий оболочки Unix while loop

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

Вам не хватает знака доллара на переменной. 'case $ more' pro' case больше', который просто рассматривает статическую строку «больше». Голосование закрывается как простая опечатка. – tripleee

+0

также 'read' без' -r' будет калечить обратную косую черту. В любом случае, это не проблема. – sjsam

ответ

3

Выражение после case должно быть значение переменной читать в предыдущей строке:

case "$anymore" in 

вместо:

case anymore in 

Update:

Как упоминалось в @Jens, вы можете опустить здесь двухзначную переменную здесь: Разделение слов не выполняется на разложениях внутри case (от http://mywiki.wooledge.org/WordSplitting#line-106).

+0

Большое спасибо Kenavoz ... Слишком плохо с моей стороны..им на этапе обучения скриптов unix shell ... – user3134805

+0

Я думаю, вы хотели сказать, что выражение после 'case' является ** не ** переменной , В вашем решении это переменное расширение, поэтому значение. И вы можете поместить '$ больше' в кавычки, чтобы избежать ошибок. –

+0

Спасибо Julien..as sugested Kenavoz и вы, код работает отлично с $ больше .. – user3134805