pra*_*upd 13 bash shell-script getopts
我在一个文件中有一个如下所示的 bash 脚本nepleaks_upd.sh
,我想以./nepleaks_upd.sh bootstrap --branch off
. 无法接受--branch
,但它的作用是./nepleaks_upd.sh bootstrap -b off
.
usage() { echo "Usage: $0 [prepare | up | down] [-b <on/off>]" 1>&2; exit 1; }
case "$1" in
bootstrap)
while getopts ":b:" o; do
case "${o}" in
b)
b=${OPTARG}
if [ ${b} == "off" ]; then
echo "git clone https://github.com/iPrayag/dotfiles.git"
## logic
fi
;;
*)
echo ${o}
usage
;;
esac
done
shift $((OPTIND-1))
echo "option1 = ${o}"
echo "option2 = ${b}"
if [ -z "${b}" ]; then
usage
fi
;;
up)
echo "up"
##logic
;;
down)
echo "down"
##logic
;;
*)
echo "Usage: $0 {up | down} dev"
exit 1
;;
esac
Run Code Online (Sandbox Code Playgroud)
没有 first case .. in .... esac
,它工作正常。随着case ... in ... esac
,它给出了空白选项-b
,
$ ./nepleaks_upd.sh bootstrap -b off
option1 = ?
option2 =
Usage: ./nepleaks_upd.sh [bootstrap | up | down] [-b <on/off>]
Run Code Online (Sandbox Code Playgroud)
Gil*_*il' 14
getopts
从第一个参数开始解析并在第一个非选项参数处停止。这是标准约定——一些 GNU 实用程序在参数之后接受选项,但正常情况是 in somecommand foo -bar qux
,-bar
不被解析为选项。
如果要在 之后开始解析选项bootstrap
,则需要指明。getopts
使用OPTIND
变量来记住它在什么位置。OPTIND
从值 1 开始。要跳过第一个参数,请将其设置为 2。
case "$1" in
bootstrap)
OPTIND=2
while getopts ":b:" o; do
…
Run Code Online (Sandbox Code Playgroud)
或者,您可以shift
使用已经处理过的参数。
subcommand=$1; shift
case "$subcommand" in
bootstrap)
while getopts ":b:" o; do
…
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
15306 次 |
最近记录: |