Ранее такой фокус провернул на Mikrotik, там проблема была в том, что неизвестно количество входящих аргументов. В bash есть специальная переменная $#, которая содержит количество параметров. Кстати, правильной проверкой будет именно:
if [ $# -ne 0 ]
then
echo "Run script"
else
exit
fi
а не:
# -n "$1" - вернет истина, если длина более 0
if [ -n "$1" ]
then
echo "Run script"
else
exit
fi
Почему?, потому что второй вариант не учитывает вероятность наличия количества аргументов менее или более необходимого, а вот первый вариант это может учесть. Что позволит не проверять наличие каждого аргумента
if [ $# -gt 2 ]
then
echo "Run script"
else
echo "less than 2 arguments"
exit
fi
Собственно знание количества аргументов позволяет описать обход так:
if [ $# -ne 0 ]
then
echo "Set is $# arg"
for (( a = 1; a <= $#; a++ ))
arg=$(eval echo \$$a)
echo $arg
done
else
exit
fi
Пример выше обработает только 9 параметров, для обработки большего количества необходимо номер поместить в фигурные скобки
if [ $# -ne 0 ]
then
echo "Set is $# arg"
for (( a = 1; a <= $#; a++ ))
arg=$(eval echo \${$a})
echo $arg
done
else
exit
fi
Такую конструкцию можно использовать например в скрипте с поиском шаблона/шаблонов
Также не стоит забывать о наличии $* - все аргументы строкой и $@ - все аргументы "массивом"
if [ $# -ne 0 ]
then
echo "Set is $# arg"
count=1
for param in "$@"
do
echo "\$@ Parameter #$count = $param"
count=$(( $count + 1 ))
done
else
exit
fi
Комментариев нет:
Отправить комментарий