LINUX.ORG.RU

Использование getopts и case

 ,


0

4

Добрый день! Уже целый час пытаюсь решить проблему с getopts. Есть bash скрипт в котором хочу использовать опции. Вот шаблон:

#!/bin/bash
while getopts f:o:h OPTION
do
	case $OPTION in 
		f) echo "F" ;;
		o) echo "N" ;;
		h) echo "Help" exit 0 ;;
		*) echo "Pusto"
		exit 0 ;;
	esac
done

Если запустить это скрипт опций, то в консоли должно выведется «Pusto», но этого не происходит. Если запустить такой скрипт:

#!/bin/bash
while getopts f:o:h OPTION
echo
do
	case $OPTION in 
		f) echo "F" ;;
		o) echo "N" ;;
		h) echo "Help" exit 0 ;;
		*) echo "Pusto"
		exit 0 ;;
	esac
done
И запустить его без опций, то слово «Pusto» выводится. В чем может быть причина такого поведения шаблона? Заранее спасибо!

h) echo «Help» exit 0 ;;

Что это.

*) echo «Pusto»
exit 0 ;;

Здесь должно быть

echo >&2 "E: unknown option $OPTION"
exit 2

Что означает «Pusto» и когда оно должно выводиться?

anonymous ()
Ответ на: комментарий от anonymous

Если вводится опция -h будет выводится справка. Если вводится любой другой символ не соответствующий шаблонам или пустая строка то выводится слово «Pusto». Это пока шаблон для скрипта.

Parn25 ()

А ты посмотри через bash -x - у тебя выполняется только getopts и все.

alozovskoy ★★★★★ ()

Во втором случае этот цикл по своей сути бесконечный.

Команда while выполняет тело цикла, пока последняя из команд, составляющих условие, завершается нормально.

Из этих двух команд

getopts f:o:h OPTION
echo
последняя всегда выполняется нормально, так что цикл может продолжаться и продолжаться.

anarquista ★★★★★ ()
Ответ на: комментарий от anarquista

Не знаю как оставить комментарий. Не получается решить задачу в лоб. Придется что то изобретать.

Parn25 ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.