man getopt
скажет вам, что двоеточие после опции указывает на наличие аргумента. У вас есть только двоеточие после v. Вы также не были shift
в вашем цикле, так что вы не сможете проанализировать какие-либо параметры после первого. И я не уверен, почему вы почувствовали необходимость иметь второй оператор case
, который имел только одну опцию по умолчанию. Кроме того, в вашем коде был ряд плохих практик, включая использование всех имен переменных и обратных кавычек вместо $()
для выполнения команд. И вы отметили свой вопрос bash , но ваш шебанг /bin/sh
. Попробуйте, но вы не должны использовать код, не понимая, что он делает.
#!/bin/sh
# Now check for arguments
opts=$(getopt -o u:pbdhrstv: --long username:,password,docker-build,help,version,\
release,remote-registry,stage,develop,target: -n 'parse-options' -- "$@")
while true; do
case "$1" in
-u|--username)
shift
api_key_art_user="$1"
echo "userENT"
;;
--)
shift;
break
;;
*)
if [ -n "$1" ]; then
err=true
echo "Invalid option $1"
fi
break
;;
esac
shift
done
echo "user $api_key_art_user"