
Для создания bash скрипта, который принимает именованные параметры, воспользуемся встроенной командой getopts (это не тоже, что системная команда getopt), которая парсит аргументы, переданные в скрипт.
while getopts ':ab:' opt; do // opt - название переменной, которая содержит переданный аргумент
case "$opt" in
a) echo "a found";;
b) echo "b found and the value is $OPTARG";;
\?) echo "unknown option";;
esac
done
shift "$((OPTIND - 1))"
for arg in $@; do
echo "received arg $arg"
done
В этом скрипте двоеточие перед названием аргумента — :a, говорит о том, что мы будем обрабатывать неизвестные аргументы в скрипте. А с двоеточием говорит скрипту, что мы также можем передать и значение, например script.sh -a -b 123.
shift — используется в случае, когда количество аргументов неизвестно и удаляет n количество строк из списка параметров, OPTIND — индекс последнего аргумента, поэтому $((OPTIND - 1)) удаляет все параметры, обработанные getopts и переходит к переданному значению.
Теперь можно вызывать скрипт с любым количество аргументов script.sh -a -b foor bar baz etc.

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