#bash
#bash
Вопрос:
У меня есть код ниже. Я хочу увеличивать iter после каждого цикла for на 1. Если цикл найдет «-a», я бы хотел, чтобы case сделал: установите swticha в true и установите posa в фактическое значение iter. Возможно ли это в любом случае? Спасибо!
iter=0
for var in "$@"
do
filtry $var "$((iter))"
$iter=$(iter 1)
done
filtry()
{
case $1 in
-a)
switcha=true
posa=$2;;
-b) switchb=true;;
-ip) switchip=true;;
-uri) switchuri=true;;
esac
}
Комментарии:
1. Я имею в виду, я хотел бы получить, является ли первый аргумент — posa значением 1, но если это третий аргумент, posa должен быть установлен на 3.
2.В
$iter=$(iter 1)
вы не можете использовать$
в левой части присваивания ($
возвращает значение переменной, поэтому не используйте его при установке значения). Кроме того,$( )
выполняет ее содержимое как команду; для выполнения математики используйте$(( ))
вместо этого. Наконец, вы должны определить,filtry
прежде чем использовать его.3. Кстати, похоже, вы пытаетесь изобрести что-то новое
getopts
— я бы посмотрел на это вместо этого.4. Да, я пытаюсь заново изобрести getopts, но мне нужно использовать более одного идентификатора chr.