美文网首页Shell语言用例
shell脚本如何传递给子脚本命令行参数

shell脚本如何传递给子脚本命令行参数

作者: CodingCode | 来源:发表于2018-10-07 13:08 被阅读7次

    shell脚本如何传递给子脚本命令行参数

    shell脚本可以使用getops来分析命令行参数,现在的一个使用场景是:

    1. 有一个入口脚本,接受命令行用户输入。
    2. 父脚本处理部分命令行参数,根据其中的部分参数值,来决定调用哪一个子脚本,然后把剩下的参数传递给子脚本解析:

    例如:
    父脚本:

    function help() {
        echo "Usage: $0 -t type ..."
        exit
    }
    
    TYPE=""
    while getopts 't:h' OPT; do
        case $OPT in
            t)
                TYPE="$OPTARG"
                break     # must break for last parent-script
                ;;
            *)
               help
               ;;
        esac
    done
    shift $(($OPTIND - 1))
    
    case $TYPE in
      sub)
        ./sub.sh -t "TTT" ${*}
        ;;
      *)
        help
        ;;
    esac
    

    父脚本处理一个参数-t,如果-t的值是sub,那么调用sub.sh子脚本,然后把剩下的参数连同重写的-t参数传递给子脚本sub.sh。

    子脚本:

    function help() {
        echo "Usage: $0 -c command ..."
        exit
    }
    
    TYPE=""
    COMMAND=""
    while getopts 't:c:h' OPT; do
        case $OPT in
            t)
                TYPE="$OPTARG"
                ;;
            c)
                COMMAND="$OPTARG"
                break      # import to skip other options
                ;;
            *)
               help
               ;;
        esac
    done
    shift $(($OPTIND - 1))
    
    echo "$0: type=[${TYPE}], command=[${COMMAND}], args=[${*}]"
    

    子脚本的参数处理就没啥特殊的 了,和普通的脚本处理命令行参数一样。

    运行例子:

    $ ./main.sh
    Usage: ./main.sh -t type ...
    
    $ ./main.sh -d avalue
    ./main.sh: 非法选项 -- d
    Usage: ./main.sh -t type ...
    
    $ ./main.sh -t sub
    ./sub.sh: type=[TTT], command=[], args=[]
    
    $ ./main.sh -t sub -c cmd
    ./sub.sh: type=[TTT], command=[cmd], args=[]
    
    $ ./main.sh -t sub -c mycmd -d mydata anyvalue anyvalue2
    ./sub.sh: type=[TTT], command=[mycmd], args=[-d mydata anyvalue anyvalue2]
    

    限制:

    1. 父脚本处理的参数必须放在最前面。
    2. 父脚本必须显式指定其处理的最后一个参数。
      在处理完这个最后参数之后必须加break语句,从而放弃对剩余参数的分析,让他们传递给子脚本。

    相关文章

      网友评论

        本文标题:shell脚本如何传递给子脚本命令行参数

        本文链接:https://www.haomeiwen.com/subject/follaftx.html