从bash shell中的另一个脚本调用脚本时,如何从调用脚本中将带前缀的参数传递给被调用的脚本?

时间:2017-05-02 14:09:03

标签: linux bash shell

我有两个脚本,其中script1采用如下预定义参数(我使用case,shift函数来移位参数并根据需要分配它们) 这就是我通常调用script1的方式:

script1 --env [env] --db [db] --table [table] --location [location]

这是我在script1中遍历参数的方式:

while [ "$#" -gt 0 ]
do
    case "$1" in
            --env | --environment)
                    shift
                    envie="$1"
                    ;;
            --db)
                    shift
                    db="$1"
                    ;;
            --table)
                    shift
                    table="$1"
                    ;;
           --tableLocation)
            shift
            tableLoc="$1"
            ;;

    esac
   shift
done

在上面的代码之后会在这里创建一个表格,而我没有故意指定代码。

我的第二个脚本调用上面的脚本和参数(动态),我很难做到这一点。我现在正以这种方式尝试。我想调用script1,如果已经创建了一个表,我想考虑一下这个状态(我认为这里的返回代码会有所帮助)。

env=env1
db=database1
table=table1
tablelocation=tablelocation1
#call script1
`source script1 --env $env --db $db --table $table1 --tableLocation $tablelocation`

我看到"命令未找到"此行的错误(没有语法错误)如果有办法用前缀参数调用script1,请告诉我。

3 个答案:

答案 0 :(得分:1)

你不需要后退。

env=env1
db=database1
table=table1
tablelocation=tablelocation1
#call script1
script1 --env "$env" --db "$db" --table "$table1" --tableLocation "$tablelocation"

如果要保存结果,则仅使用反向刻度。

确保script1可执行(chmod +x)且目录是您的PATH

答案 1 :(得分:1)

您的脚本只处理第一个参数/值对。你需要循环,同时还有剩下的参数,例如类似的东西:

while [[ $# -ge 1 ]]; do
    case "$1" in
            --env | --environment)
                    shift
                    envie="$1"
                    ;;
            --db)
                    shift
                    db="$1"
                    ;;
            --table)
                    shift
                    table="$1"
                    ;;
           --tableLocation)
                    shift
                    tableLoc="$1"
                    ;;
           *)
                    echo "invalid argument: $1"
                    exit 1
                    ;;
    esac
    shift  # shift out the consumed value
done

答案 2 :(得分:0)

如果你想重用你的初始参数,在移除它们之前将它们存储在一个数组中:

initialArgs=( "$@" )

while [ "$#" -gt 0 ]; do
  : ...processing here...
  shift
done

source script1 "${initialArgs[@]}"