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

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

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

有一个入口脚本,接受命令行用户输入。

父脚本处理部分命令行参数,根据其中的部分参数值,来决定调用哪一个子脚本,然后把剩下的参数传递给子脚本解析:

例如:

父脚本:

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]

限制:

父脚本处理的参数必须放在最前面。

父脚本必须显式指定其处理的最后一个参数。

在处理完这个最后参数之后必须加break语句,从而放弃对剩余参数的分析,让他们传递给子脚本。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值