Есть три способа
Просто сделать свой цикл, который бежит по всем аргументам
Второй - встроенный getopts
Третий - правильный getopt. Он умеет и в длинные и короткие опции.
Вот накидал правильный пример для getopt вроде как все как рекомендовано.
Указаны доступные короткая опция -h и длинные --help и --start, при этом --start требует дополнительного аргумента.
function usage {
echo " Syntax:"
echo " $0 -h"
echo " $0 --help"
echo " $0 -start <environment>"
}
OPTSTR=$(getopt --name $0 --options h --longoptions help,start: -- $@)
[ $? -ne 0 ] && echo "ERROR: wrong option" && usage && exit 1
[ $# -eq 0 ] && echo "ERROR: no arguments" && usage && exit 1
eval set -- "${OPTSTR}"
# parse all arguments.
while true; do
case "${1}" in
-h|--help) usage; exit 0;;
--start) ENV="${2}"; shift 2;;
--) break;;
*) echo "ERROR: unknown"; usage; exit 1;;
esac
done
echo "Starting program with environment: ${ENV}"