美文网首页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脚本如何传递给子脚本命令行参数

    shell脚本如何传递给子脚本命令行参数 shell脚本可以使用getops来分析命令行参数,现在的一个使用场景是...

  • Linux各种变量的含义

    # 是传给脚本的参数个数0 是脚本本身的名字1 是传递给该shell脚本的第一个参数2 是传递给该shell脚本的...

  • Shell 脚本编程(高级篇)

    高级篇 一、处理用户输入 1. 读取脚本参数 Bash Shell 将命令行中传递给脚本的参数赋值给一组特殊的变量...

  • 第6章broker-3

    我们在server.properties文件设置配置,然后将其作为命令行参数传递给broker启动shell脚本。...

  • 特殊变量列表

    特殊变量列表 命令行参数 运行脚本时传递给脚本的参数称为命令行参数。命令行参数用 $n 表示,例如,$1 表示第一...

  • Shell (六)

    Shell 命令行参数 在脚本中通过 $1, $2, $3, 引用参数${10} 时,参数必须在大括号中。 脚本的...

  • [Linux笔录]Linux/Shell笔记

    Shell中的$几种含义 $# 是传给脚本的参数个数 $0 是脚本本身的名字 $1 是传递给该shell脚本的第一...

  • Linux中变量$#,$@,$0,$1,$2,$*,$$,$?的

    $# 是传给脚本的参数个数 $0 是脚本本身的名字 $1 是传递给该shell脚本的第一个参数 $2 是传递给该s...

  • Linux中变量$#,$@,$0,$1,$2,$*,$$,$?的

    $# 是传给脚本的参数个数 $0 是脚本本身的名字 $1 是传递给该shell脚本的第一个参数 $2 是传递给该s...

  • 第14章:处理用户输入

    [TOC] #1. 命令行参数 向shell脚本传递数据的最基本方法是使用命令行参数。命令行参数允许在运行脚本时向...

网友评论

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

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