LINUX.ORG.RU
решено ФорумAdmin

обработка ввода оператором case

 , ,


0

1

Добрый день. Необходимо обрабатывать $1 на предмет содержания нужного символа. Получается что-то вроде

if echo "$1"| grep -q a; then var="name1"; fi;
if echo "$1"| grep -q b; then var="name2"; fi;
..
if echo "$1"| grep -q c; then var="namen"; fi;



Чувствую, сюда просится case, но не могу сообразить. 

Спасибо.

Ответ на: комментарий от Spoofing

да, наверное так, если будет работать. Спасибо!

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

local чтобы создать локальную переменную, которая работает только внутри функции. не используй глобальные переменные без явной на то необходимости.

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

Присмотрелся, брежу. Тут то же самое. Тебе спасибо тоже. Звездочек не увидел.

rusya_rr
() автор топика

Я надеюсь, что это не код обработки опций-ключей, которые передаются скрипту...

Kroz ★★★★★
()

Есть такой вариант

-size 1231 -name qwe

while echo $1 | grep -q ^-; do
    eval $( echo $1 | sed 's/^-//' )=$2
    shift
    shift
done

#args arguments
echo $name
echo $size 

Для другого синтаксиса меняй регекс Я этим не пользуюсь.)

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

Считай это спортивным интересом и исследовательской работой.

rusya_rr
() автор топика
Ответ на: комментарий от Spoofing

А как тут же сделать подобное для символа, НЕ содержащегося в $1? Что-то вроде:

!*"a"*|!*"b"*)
echo "a or b must be choosed"
;;

Нужно здесь же проверить $1 на обязательное содержание символа. Спасибо.

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

В bash - см. shopt -s extglob.
для твоих целей достаточно, но непортабельно.

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

Это самый ужасный алгоритм разбора опций-ключей:
- ты на каждом шаге grep'аешь по регулярке всю строку - совершенно неоправданное расточительство ресурсов
- ты не проверяешь наличие недопустимых ключей/символов
- ты не проверяешь порядок ключей; один ключ может включать что-то, второй - выключать то же; как ты обеспечишь нормальное поведение программы если оба ключа встретятся в одной строке?

Никогда так не пиши!

Kroz ★★★★★
()
Последнее исправление: Kroz (всего исправлений: 1)
Ответ на: комментарий от rusya_rr

Уговорили. Пусть будет getopts. Всем спасибо!

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