我试图通过案例获得getopts选项。
现在我的脚本设置方式,我有一个启动,停止,状态,帮助选项,我想添加一些-x选项来控制一些变量。
如果我不使用开始/停止/状态,那么-x变量可以工作,但是当我使用它们时却不行。
代码的相关部分如下。
# Variable initialization
DOMAIN="google.ca"
LIMIT="25"
TIMEBETWEEN="10"
INTERATION="1"
PINGS="25"
options='d:l:t:p:h'
while getopts $options opt; do
case $opt in
d) DOMAIN=$OPTARG ;;
l) LIMIT=$OPTARG ;;
t) TIMEBETWEEN=$OPTARG ;;
p) PINGS=$OPTARG ;;
\?) usage ;;
esac
done
shift "$((OPTIND-1))" # Shift off the options and optional --.
和
case "$cmd" in
start)
pingtest_start &
sleep 2
pingtest status
exit 0;
;;
stop)
pingtest_stop
exit 0;
;;
status)
pingtest_status
exit 0;
;;
help)
usage
exit 0;
;;
*)
if [ "$cmd" ]; then
clear
echo "Unknown command '$cmd'"
fi
usage
;;
esac
其他变量有效,如果我使用start,则默认值可以正常工作。
编辑如下:
通过将$ cmd的案例放入新选项并将案例更改为$ OPTARG
,我找到了一个解决方法新布局
options='a:d:l:t:p:h'
while getopts $options opt; do
case $opt in
a) case $OPTARG in
start)
pingtest_start &
sleep 2
pingtest status
exit 0;
;;
stop)
pingtest_stop
exit 0;
;;
status)
pingtest_status
exit 0;
;;
esac
;;
d) DOMAIN=$OPTARG ;;
l) LIMIT=$OPTARG ;;
t) TIMEBETWEEN=$OPTARG ;;
p) PINGS=$OPTARG ;;
\?) usage ;;
esac
done
shift "$((OPTIND-1))" # Shift off the options and optional --.
答案 0 :(得分:1)
你是否像./script start -d a -l 42
一样调用你的脚本? getopts期待争论首先出现。
- 格伦杰克曼
请参阅格伦杰克曼的评论。 getopts
在看到第一个非选项参数后立即停止,因此在开始shift
循环之前,您需要getopts
第一个参数。
- chepner