Shell 语法错误:“虽然:找不到命令”
Posted
技术标签:
【中文标题】Shell 语法错误:“虽然:找不到命令”【英文标题】:Shell Syntax error: 'While: command not found' 【发布时间】: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
运算符用于比较“可用”等),这并不能使问题符合我们的准则 - 相反,每个问题有多个错误会使其“过于宽泛”。
Why should there be a space after [
and before ]
in bash?; How to compare strings in bash?
还要注意wait 15
不是等待15秒,而是等待ID为15的进程退出;你可能想要sleep 15
。即使您实际监控的任何程序的状态在这 15 秒内确实发生了变化,您仍然使用 INSTANCE_STATUS
的旧值,而不是检查此代码中是否有更新;因此,无论实例状态是否发生变化,循环始终是无限的。
【参考方案1】:
您的原始代码中有许多简单的错误:While
不是 while
、[
周围缺少空格、缺少双引号、比较运算符 -eq
和 -ne
不适用于比较字符串...
小心使用wait
,这是一个有效的shell 命令。但可能你的意思是sleep
。 Here 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 脚本技能已经很生疏了。
【讨论】:
以上是关于Shell 语法错误:“虽然:找不到命令”的主要内容,如果未能解决你的问题,请参考以下文章
我在将我的 bash 命令转换为 shell 脚本中的 shell 脚本语法错误时遇到错误