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

你可能感兴趣的:(传递参数到linux脚本)