我有两个脚本,其中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,请告诉我。
答案 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[@]}"