ESXi shell 脚本正在删除一条消息
ESXi shell scripting getting rid of a message
我正在做一个小型 VMware ESXi 项目(个人项目,不为任何公司)。
我正在尝试构建一个 html 文件,其中包含 table 以及来自 ESXi OS 的一些信息,例如 time/date、OS 版本、补丁号等。
但是有些命令没有输出,然后我的 table 有一个空框(单元格)。
我正在尝试做的......并且非常失败......是我试图在 shell 脚本中放置一个简单的 if-else-fi 语句来检查输出是否为空。
这是我用来检查命令是否有输出的命令:
if [ $(esxcli hardware ipmi bmc get |grep -i gate |awk '{print }') != " " ]; then echo "Not Empty!"; else echo "Empty!"; fi
这个问题是,虽然它给出了正确的结果,但它也打印出以下内容:
sh: : unknown operand
Empty!
是的,结果应该是 "Empty!",但我无法摆脱 "sh: : unknown operand" 消息。
似乎不喜欢 != 操作数不接近“)”。
但是如果我将“!=”操作数放在“)”附近,就像这样:
if [ $(esxcli hardware ipmi bmc get |grep -i gate |awk '{print }')!=" " ]; then echo "Not Empty!"; else echo "Empty!"; fi
..它不再给出 "sh: : unknown operand" 消息,但给出了错误的结果 "Not Empty!"。
但是,如果我在给出输出的 if-else-fi 语句中插入一个命令,例如:
if [ $(esxcli system time get) != " " ]; then echo "Not Empty!"; else echo "Empty!"; fi
..它不给出 "sh: : unknown operand" 消息并给出正确的结果 "Not Empty!"
我尝试了以下方法,但它给出了相同的 "sh: : unknown operand" 信息:
if [[ $(esxcli hardware ipmi bmc get |grep -i gate |awk '{print }') != " " ]]; then echo "Not Empty!"; else echo "Empty!"; fi
if [ -n $(esxcli hardware ipmi bmc get |grep -i gate |awk '{print }') ]; then echo "Not Empty!"; else echo "Empty!"; fi
if [ -z $(esxcli hardware ipmi bmc get |grep -i gate |awk '{print }') ]; then echo "Not Empty!"; else echo "Empty!"; fi
if "$(esxcli hardware ipmi bmc get |grep -i gate |awk '{print }')" == " " ; then echo "Not Empty!"; else echo "Empty!"; fi
if $(esxcli hardware ipmi bmc get |grep -i gate |awk '{print }')==" "; then echo "Not Empty!"; else echo "Empty!"; fi
我怎样才能摆脱那条消息...我还能做什么?
如果 $(esxcli ...)
命令表达式没有产生任何输出,则要求 shell 对其求值:
if [ != " " ] ; then ...
这不是一个格式正确的表达式。要修复,请在 esxcli
命令表达式(括号外)两边加上双引号,如下所示:
if [ "$(esxcli hardware ipmi bmc get |grep -i gate |awk '{print }')" != " " ]; then echo "Not Empty!"; else echo "Empty!"; fi
执行此操作时,如果表达式的输出为空,shell 会看到:
if [ "" != " " ] ; then ...
这是它能理解的表达方式。
请注意,空字符串 ""
将不匹配您当前在 !=
右侧的单个 space " "
。您需要将 space 更改为空字符串,或切换到使用 -z
运算符("is the following a zero-length string?")或 -n
运算符("is the following a non-empty string?"),取决于哪个适合您的程序逻辑。 -n
是您现有逻辑想要的,它看起来像这样:
if [ -n "$(esxcli hardware ipmi bmc get |grep -i gate |awk '{print }')" ]; then echo "Not Empty!"; else echo "Empty!"; fi
请注意,您仍然需要在命令表达式周围使用双引号。
我正在做一个小型 VMware ESXi 项目(个人项目,不为任何公司)。 我正在尝试构建一个 html 文件,其中包含 table 以及来自 ESXi OS 的一些信息,例如 time/date、OS 版本、补丁号等。 但是有些命令没有输出,然后我的 table 有一个空框(单元格)。 我正在尝试做的......并且非常失败......是我试图在 shell 脚本中放置一个简单的 if-else-fi 语句来检查输出是否为空。 这是我用来检查命令是否有输出的命令:
if [ $(esxcli hardware ipmi bmc get |grep -i gate |awk '{print }') != " " ]; then echo "Not Empty!"; else echo "Empty!"; fi
这个问题是,虽然它给出了正确的结果,但它也打印出以下内容:
sh: : unknown operand
Empty!
是的,结果应该是 "Empty!",但我无法摆脱 "sh: : unknown operand" 消息。 似乎不喜欢 != 操作数不接近“)”。
但是如果我将“!=”操作数放在“)”附近,就像这样:
if [ $(esxcli hardware ipmi bmc get |grep -i gate |awk '{print }')!=" " ]; then echo "Not Empty!"; else echo "Empty!"; fi
..它不再给出 "sh: : unknown operand" 消息,但给出了错误的结果 "Not Empty!"。 但是,如果我在给出输出的 if-else-fi 语句中插入一个命令,例如:
if [ $(esxcli system time get) != " " ]; then echo "Not Empty!"; else echo "Empty!"; fi
..它不给出 "sh: : unknown operand" 消息并给出正确的结果 "Not Empty!"
我尝试了以下方法,但它给出了相同的 "sh: : unknown operand" 信息:
if [[ $(esxcli hardware ipmi bmc get |grep -i gate |awk '{print }') != " " ]]; then echo "Not Empty!"; else echo "Empty!"; fi
if [ -n $(esxcli hardware ipmi bmc get |grep -i gate |awk '{print }') ]; then echo "Not Empty!"; else echo "Empty!"; fi
if [ -z $(esxcli hardware ipmi bmc get |grep -i gate |awk '{print }') ]; then echo "Not Empty!"; else echo "Empty!"; fi
if "$(esxcli hardware ipmi bmc get |grep -i gate |awk '{print }')" == " " ; then echo "Not Empty!"; else echo "Empty!"; fi
if $(esxcli hardware ipmi bmc get |grep -i gate |awk '{print }')==" "; then echo "Not Empty!"; else echo "Empty!"; fi
我怎样才能摆脱那条消息...我还能做什么?
如果 $(esxcli ...)
命令表达式没有产生任何输出,则要求 shell 对其求值:
if [ != " " ] ; then ...
这不是一个格式正确的表达式。要修复,请在 esxcli
命令表达式(括号外)两边加上双引号,如下所示:
if [ "$(esxcli hardware ipmi bmc get |grep -i gate |awk '{print }')" != " " ]; then echo "Not Empty!"; else echo "Empty!"; fi
执行此操作时,如果表达式的输出为空,shell 会看到:
if [ "" != " " ] ; then ...
这是它能理解的表达方式。
请注意,空字符串 ""
将不匹配您当前在 !=
右侧的单个 space " "
。您需要将 space 更改为空字符串,或切换到使用 -z
运算符("is the following a zero-length string?")或 -n
运算符("is the following a non-empty string?"),取决于哪个适合您的程序逻辑。 -n
是您现有逻辑想要的,它看起来像这样:
if [ -n "$(esxcli hardware ipmi bmc get |grep -i gate |awk '{print }')" ]; then echo "Not Empty!"; else echo "Empty!"; fi
请注意,您仍然需要在命令表达式周围使用双引号。