【发布时间】:2021-11-06 15:19:48
【问题描述】:
我的脚本是接受一个参数dms。一旦获得,它就会创建多个变量,用作retry_cli 的参数。我遇到的问题是位置参数的使用。如何解决脚本创建变量并将其用作每个函数运行的参数的机制?
目前似乎该函数使用的是触发脚本时注入的位置参数,而不是在其中创建的参数。 Documentation 表示两个 $1 位置参数(用于脚本和函数)不应该成为问题。
dms_name=$1
aws_region="us-east-1"
dms_arn=`aws dms describe-replication-tasks --filter Name=replication-task-id,Values="$dms_name" --query=ReplicationTasks[0].ReplicationTaskArn --output text --region "$aws_region"`
ri_arn=`aws dms describe-replication-tasks --filter Name=replication-task-id,Values=$dms_name --query=ReplicationTasks[0].ReplicationInstanceArn --region "$aws_region"`
target_arn=`aws dms describe-replication-tasks --filter Name=replication-task-id,Values=$dms_name --query=ReplicationTasks[0].TargetEndpointArn --region "$aws_region"`
ri_status=`aws dms describe-connections --filter Name=replication-instance-arn,Values=$ri_arn --query=Connections[0].Status --region "$aws_region"`
target_status=`aws dms describe-connections --filter Name=endpoint-arn,Values=$target_arn --query=Connections[0].Status --region "$aws_region"`
retry_cli () {
local max_retry=100
local counter=0
local sleep_seconds=15
local aws_region="us-east-1"
until [[ $1 =~ "success" ]]
do
status=`aws dms describe-connections --filter Name=$2,Values="$3" --query=Connections[0].Status --region "$aws_region"`
[[ counter -eq $max_retry ]] && echo "connection status of $3 failed!" && exit 1
((counter++))
sleep $sleep_seconds
done
echo "connection for $3 OK!"
}
retry_cli "$ri_status" replication-instance-arn "$ri_arn"
retry_cli "$target_status" endpoint-arn "$target_arn"
echo startting dms
aws dms start-replication-task --replication-task-arn "$dms_arn" --start-replication-task-type resume-processing --region "$aws_region"
echo done
预期行为:
- 脚本运行:
sh script.sh dms_name - 每个
dms_变量都会被填充 -
retry_cli使用 3 个参数调用。当$*_status不像success字符串时,函数必须用aws cli命令获取最新的status,只要返回success就重复 - 转到第二个函数调用
【问题讨论】:
标签: bash amazon-web-services shell command-line-interface