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

时间:2014-10-27 16:29:34

标签: 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

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

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

3 个答案:

答案 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