【发布时间】:2021-04-05 16:30:13
【问题描述】:
我有一个bashscript.sh,我将$ chmod +x bashscript.sh 移动到$ mv bashscript.sh ~/.local/bin/,以便它像系统命令一样可执行。
我希望能够调用它
bashscript [<-w|-working|--working>[=|:]] <y|yes|n|no>
如果调用不被尊重,则返回用法/帮助/错误(我们想要的任何调用)。
为此,我编写了这个解析部分:
usage(){
echo "you're wrong."
exit 1
}
[[ $# -lt 1 ]] && usage
options=$(getopt -o y,n,h,w: -l yes,no,help,working: -- "$@")
set -- $options
while true; do
case "$1" in
-h|--help|*) usage
shift;;
y|yes)
#do something
shift;;
n|no)
#..
shift;;
-w|-working|--working)
shift;;
--) #this is just syntax
shift
break;;
esac
done
但是当我测试它并没有按预期工作时*,你知道为什么/有一个样本来处理我的选项可能性吗?
*edit : 我总是触发使用显示
edit 2:删除了选项“=”周围的空格,正如@costaparas3 指出的那样,谢谢,但仍然坚持使用()
【问题讨论】:
-
你观察到什么行为?
-
它总是让我回到使用输出。示例:$ bashscript -w n
-
请edit您的问题添加所需的信息或澄清。将大小写
-h|--help|*)移到末尾,因为它包含*,shell 将使用第一个匹配的大小写。 -
@bodo 达到了重点……第一个
case语句包括*=> 匹配所有内容;如果删除*不能解决问题...请提供一个示例,说明您如何调用脚本,以便我们查看命令行中传递的内容
标签: linux bash shell unix command-line