Некоторые картинки не загружаются из РФ и РК, используйте VPN.

вторник, 3 января 2023 г.

Bash script обход аргументов скрипта/функции

Ранее такой фокус провернул на 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

Подглядел на хабре

Комментариев нет:

Отправить комментарий