Как написать getopt в скрипте bash
У меня есть функция с несколькими параметрами. Например:
makeUser{
login
email
password}
Я хочу сделать флаги как -l|--login
, -e|--email
а также -p|--password
но я не знаю как.
Пример для этого должен выглядеть следующим образом:
./script.sh --mode makeUser --login test --email test@test.com -p testxx
Как я могу достичь этого результата? Я знаю только, как сделать это с помощью getopts (короткие флаги).
Должно ли это выглядеть как код ниже?
while true ; do
case "$1" in
-m|--mode)
makeUser)
case "$2" in
-l|--login)
makeUser "$OPTARG"
case "$3" in
-e|--email)
makeUser "$OPTARG"
case "$4" in
-p|--password)
makeUser "$OPTARG"
exit $?
esac ;;
exit $?
esac ;;
exit $?
esac ;;
makeProject)...
makeSite)...
exit $?
esac ;;
done
1 ответ
Решение
С помощью while
а также shift
делает чистое решение для поведения, похожего на getopt в bash:
while [ $# -gt 0 ]; do
case "$1" in
-h|"-?"|--help)
shift
echo "usage: $0 [-v] [--mode MODE] [-l login] [-e email] [...]"
exit 0
;;
--mode)
MODE=$2
shift; shift;
;;
-l|--login)
LOGIN=$2
shift; shift;
;;
-e|--email)
EMAIL=$2
shift; shift;
;;
-v|--verbose)
VERBOSE=1
shift;
;;
*)
echo "Error: unknown option '$1'"
exit 1
esac
done
# example function makeUser
makeUser()
{
login=$1
email=$2
echo "function makeUser with login=${login} and email=${email}"
}
if [ "$MODE" == "makeUser" ]; then
makeUser $LOGIN $EMAIL # ... and so on
fi