我解析了一些类似的问题,但这些问题并不适合我。
我有这个很棒的bash脚本,可以执行一些很酷的功能,这里是代码的相关部分:
while getopts ":hhelpf:d:c:" ARGS;
do
case $ARGS in
h|help )
help_message >&2
exit 1
;;
f )
F_FLAG=1
LISTEXPORT=$OPTARG
;;
d )
D_FLAG=1
OUTPUT=$OPTARG
;;
c )
CLUSTER=$OPTARG
;;
\? )
echo ""
echo "Unimplemented option: -$OPTARG" >&2
echo ""
exit 1
;;
: )
echo ""
echo "Option -$OPTARG needs an argument." >&2
echo ""
exit 1
;;
* )
help_message >&2
exit 1
;;
esac
done
现在,如果触发,我的所有选项都可以正常运行。我想要的是getopts在没有触发任何选项的情况下吐出 help_message函数,比如脚本只是在没有参数的情况下启动 ./ scriptname.sh 。
我在这里发布了一些方法,实现 IF 循环和函数但是,因为我刚开始使用bash而且我已经在这个脚本上有一些IF周期,我想知道是否有更简单(和漂亮)的方法。
答案 0 :(得分:11)
如果您只想检测没有选项的被调用脚本,那么只需检查脚本中的$#
值,并在零时退出。
如果你想捕获没有传递选项参数的情况(但是非选项参数)仍然传递,那么你应该能够在OPTIND
循环之后检查getopts
的值。当它为1时退出(表示第一个参数是非选项参数)。
答案 1 :(得分:4)
非常感谢Etan Reisner,我最终使用了你的建议:
if [ $# -eq 0 ];
then
help_message
exit 0
else
...... remainder of script
这完全符合我的想法。 感谢。
答案 2 :(得分:0)
从@Etan Reisner的语句中删除示例代码:
您想捕获没有传递任何选项参数(但非选项参数)仍然传递的情况,那么您应该能够在getopts循环之后检查OPTIND的值,并在它为1时退出(指示第一个参数是非选项参数。
# Check if any arguments were passed
if [ $OPTIND -eq 1 ]; then
help_message
exit 1
fi
# ........ the rest of the script
以防万一有人想要样品视觉visual