如果没有提供选项,有getopts显示帮助

Oma*_*mar 7 bash getopts

我解析了一些类似的问题,但这些问题并不适合我.

我有这个很棒的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
Run Code Online (Sandbox Code Playgroud)

现在,如果触发,我的所有选项都运行良好.我想要的是getopts 在没有触发选项时吐出help_message函数,比如脚本只是在没有参数的情况下启动./scriptname.sh.

我在这里看到了一些方法,实现了IF循环和函数,但是,因为我刚开始使用bash并且我已经在这个脚本上有一些IF循环,我想知道是否有一种更简单(和漂亮)的方法来这个.

Eta*_*ner 11

如果您只想检测没有选项的被调用脚本,那么只需检查$#脚本中的值,并在它为零时退出.

如果你想捕获没有传递选项参数的情况(但是非选项参数)仍然传递,那么你应该能够检查循环OPTIND之后的值getopts并在它为1时退出(表示第一个参数是一个非选项参数).


Oma*_*mar 5

非常感谢 Etan Reisner,我最终使用了您的建议:

if [ $# -eq 0 ];
then
    help_message
    exit 0
else
...... remainder of script
Run Code Online (Sandbox Code Playgroud)

这完全按照我的想法工作。谢谢。