现在,我在脚本(bash)中使用awscli发送请求,以在创建实例后检查实例状态。 但我收到此消息:

/bin/bash: eval: line 130: syntax error: unexpected end of file

我尝试了两种方法:

这个第一:

while INSTANCE_STATE=$(aws ec2 describe-instances \
--instance-ids $INSTANCE_ID --output text  \
--query 'Reservations[*].Instances[*].State.Name');  \
test "$INSTANCE_STATE" = "pending";  \
do sleep 1; echo -n '.' done;  \
echo " $INSTANCE_STATE"

然后,另一个:

until [ test "$INSTANCE_STATE" = "running" ] do \
echo 'Wait for instance.'; \
INSTANCE_STATE=$(aws ec2 describe-instances \
--instance-ids $INSTANCE_ID --output text \
--query 'Reservations[*].Instances[*].State.Name'); \
sleep 2; echo -n '.' done; \
echo " $INSTANCE_STATE"

在这两种情况下,结果几乎都是相同的。 我做错了什么? 有什么帮助吗?

#1楼 票数:0 已采纳

以下是一个班轮命令:

while INSTANCE_STATE=$(aws ec2 describe-instances --instance-ids $INSTANCE_ID --output text --query 'Reservations[*].Instances[*].State.Name'); test "$INSTANCE_STATE" = "pending"; do sleep 1; echo -n '.'; done

下面是shell脚本:

#!/bin/bash
INSTANCE_ID=
while INSTANCE_STATE=$(aws ec2 describe-instances --instance-ids $INSTANCE_ID --output text --query 'Reservations[*].Instances[*].State.Name');
test "$INSTANCE_STATE" = "running"
do
sleep 1
echo -n '.'
done
echo " $INSTANCE_STATE"

您应该坚持使用第一个代码,因为另一个代码首先评估条件,然后分配值,而在第一个代码中,则首先分配值,然后评估,这将节省分配变量的步骤。

由于上述原因,其他代码抛出以下错误:

line 3: [: too many arguments

您在代码中看到的问题在某些地方是多余的\\ 否则,您的代码可以正常工作。

  ask by PulidoVPE translate from so

未解决问题?本站智能推荐:

2回复

AWS CLI - 管理实例的 Bash 脚本

我需要在 AWS 上运行 shadowsocks 服务器(我住在中国,这是使用 google 的最佳解决方案......) 我已经在我的 VM 实例上设置了所有内容,唯一的问题是当 VM 重新启动时 ip 也会发生变化,因此我必须使用新 ip 手动设置我的 shadowsock 客户端配置。
2回复

使用 AWS CLI 创建实例时如何禁用 SourceDestCheck

应该可以禁用 SourceDestCheck,因为它记录在案“SourceDestCheck -> (boolean)” 但是使用运行实例 或者 使用未知选项失败:--SourceDestCheck,false 看来我可以稍后使用修改命令运行它 但应该可以在实例化时设置它。 我
2回复

Bash/AWS CLI:在通过 AWS SSM 重新启动 EC2 实例组时,试图找出如何通过 2 个检查来验证一系列正常运行时间

我一直在努力找出解决 bash 脚本这个问题的最佳方法。 我有一个命令可以在几分钟内检查服务器组的正常运行时间。 我只想在所有服务器都启动 5 分钟后继续进行下一组重新启动,但也想验证它们没有启动一个多小时,以防重新启动不需要。 我最初试图设置一个 while 循环,它会不断发出命令来检查正常运行
1回复

使用 bash 和 AWS CLI 从所有区域取消关联和释放所有弹性 IP 地址的脚本

我正在学习如何使用 AWS 基础设施和 CLI 工具。 我有许多带有公共 IP 的 EC2 实例,我已经使用 Russell Jurney Source编写的另一个 CLI 脚本终止了这些实例。 我试图修改它以释放所有公共 IP,但由于我对脚本和 json 非常陌生,我无法理解这个。 如何解决此脚
2回复

如何在使用 bash 脚本启动会话管理器后在 EC2 实例上运行命令?

我正在编写 bash 脚本以使用会话管理器在 ec2 实例上安装缺少的补丁。 我可以使用脚本启动会话,但我不确定如何使用脚本在其上运行命令? 我想使用脚本在 ec2 实例中运行sudo yum update-minimal --sec-severity=critical,important --
1回复

bash脚本中用于重复安全组的AWS CLI错误处理

我正在使用Bash脚本使用AWS CLI创建安全组。 我想在脚本中实现错误处理,例如,如果创建一个具有相同名称的安全组,则可以使用if-else或任何其他迭代来处理它。 但这对我不起作用。 这是重复创建sg时出现的错误代码。 An error occurred (Invalid
1回复

从AWS CLI启动EC2实例时未执行用户数据脚本

我正在尝试使用AWS CLI从其上安装了Docker的映像启动EC2实例,然后提供该实例提供的--user-data传递的脚本以从Docker集线器中提取映像并运行该图像。 我的AWS CLI命令启动了实例,但是似乎传递给--user-data的脚本永远不会运行。 CLI命令是:
1回复

AWS CLI:如何扩展 aws ssm send-command 目标中的变量? [复制]

这个问题在这里已经有了答案: Bash 中单引号和双引号的区别6 个回答 8 个月前关闭。 我正在尝试构建一个