Shell语言用例

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

2018-10-07  本文已影响7人  CodingCode

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语句,从而放弃对剩余参数的分析,让他们传递给子脚本。
上一篇 下一篇

猜你喜欢

热点阅读