【问题标题】:Shell Syntax error: 'While: command not found'Shell 语法错误:“虽然:找不到命令”
【发布时间】:2019-08-19 10:03:28
【问题描述】:

下面的代码-sn-p 检查instance_status 是否可用。如果可用,请等待 15 秒,如果并回显实例状态。

我收到以下错误:

第 38 行:虽然:找不到命令

代码:

While ["$INSTANCE_STATUS" -eq "available"] 
do
  wait 15
  if $INSTANCE_STATUS" -ne "available"
  then 
    echo "$SOURCE_INSTANCE_ID" is "$INSTANCE_STATUS"
  fi
done

【问题讨论】:

  • 你应该看看shellcheck.net
  • 试试while(小写)
  • ...虽然这里也有其他错误([s 周围缺少空格,使用-ne 进行字符串而不是数字比较,缺少test 运算符用于比较“可用”等),这并不能使问题符合我们的准则 - 相反,每个问题有多个错误会使其“过于宽泛”。
  • 还要注意wait 15不是等待15秒,而是等待ID为15的进程退出;你可能想要sleep 15。即使您实际监控的任何程序的状态在这 15 秒内确实发生了变化,您仍然使用 INSTANCE_STATUS 的旧值,而不是检查此代码中是否有更新;因此,无论实例状态是否发生变化,循环始终是无限的。

标签: shell


【解决方案1】:

您的原始代码中有许多简单的错误:While 不是 while[ 周围缺少空格、缺少双引号、比较运算符 -eq-ne 不适用于比较字符串...

小心使用wait,这是一个有效的shell 命令。但可能你的意思是sleepHere details 关于差异。

试试这个:

while [ "$INSTANCE_STATUS" = "available" ] 
do
  sleep 15 # 'waits' 15 seconds.

  # ATTENTION: here you might need to 'refresh' $INSTANCE_STATUS value to avoid an endless loop.
  # Solution suggested by @Charles Duffy:
  # INSTANCE_STATUS=$(systemctl status "$SOURCE_INSTANCE_ID")

  if [ "$INSTANCE_STATUS" != "available" ]
  then 
    echo "$SOURCE_INSTANCE_ID is $INSTANCE_STATUS"
  fi
done

已编辑:@Charles Duffy 建议对原始答案进行许多修复 ...forced ;)。谢谢查尔斯,现在我意识到我的 shell 脚本技能已经很生疏了。

【讨论】:

    猜你喜欢
    • 2018-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-10
    • 2013-04-26
    • 1970-01-01
    • 2016-04-14
    • 2014-12-20
    相关资源
    最近更新 更多