如何在 bash 脚本中编写 getopt
How to write getopt in bash script
我有一个带有几个参数的函数。例如:
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 "" in
-m|--mode)
makeUser)
case "" in
-l|--login)
makeUser "$OPTARG"
case "" in
-e|--email)
makeUser "$OPTARG"
case "" in
-p|--password)
makeUser "$OPTARG"
exit $?
esac ;;
exit $?
esac ;;
exit $?
esac ;;
makeProject)...
makeSite)...
exit $?
esac ;;
done
使用 while
和 shift
为 bash 中类似 getopt 的行为提供了一个干净的解决方案:
while [ $# -gt 0 ]; do
case "" in
-h|"-?"|--help)
shift
echo "usage: [=10=] [-v] [--mode MODE] [-l login] [-e email] [...]"
exit 0
;;
--mode)
MODE=
shift; shift;
;;
-l|--login)
LOGIN=
shift; shift;
;;
-e|--email)
EMAIL=
shift; shift;
;;
-v|--verbose)
VERBOSE=1
shift;
;;
*)
echo "Error: unknown option ''"
exit 1
esac
done
# example function makeUser
makeUser()
{
login=
email=
echo "function makeUser with login=${login} and email=${email}"
}
if [ "$MODE" == "makeUser" ]; then
makeUser $LOGIN $EMAIL # ... and so on
fi
我有一个带有几个参数的函数。例如:
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 "" in
-m|--mode)
makeUser)
case "" in
-l|--login)
makeUser "$OPTARG"
case "" in
-e|--email)
makeUser "$OPTARG"
case "" in
-p|--password)
makeUser "$OPTARG"
exit $?
esac ;;
exit $?
esac ;;
exit $?
esac ;;
makeProject)...
makeSite)...
exit $?
esac ;;
done
使用 while
和 shift
为 bash 中类似 getopt 的行为提供了一个干净的解决方案:
while [ $# -gt 0 ]; do
case "" in
-h|"-?"|--help)
shift
echo "usage: [=10=] [-v] [--mode MODE] [-l login] [-e email] [...]"
exit 0
;;
--mode)
MODE=
shift; shift;
;;
-l|--login)
LOGIN=
shift; shift;
;;
-e|--email)
EMAIL=
shift; shift;
;;
-v|--verbose)
VERBOSE=1
shift;
;;
*)
echo "Error: unknown option ''"
exit 1
esac
done
# example function makeUser
makeUser()
{
login=
email=
echo "function makeUser with login=${login} and email=${email}"
}
if [ "$MODE" == "makeUser" ]; then
makeUser $LOGIN $EMAIL # ... and so on
fi