【问题标题】:Simple Unix statement not working简单的 Unix 语句不起作用
【发布时间】:2012-05-16 18:33:16
【问题描述】:

对不起 UNIX 新手。我有一个在我的 NAS 上运行的脚本,它只是检查我的 IP 是什么,并运行一个脚本来重新连接 VPN(如果它已更改)。

注意:对于这个示例,我已将下面 IP 中的前四个数字更改为“x”,我知道它们需要反映我的真实 IP 地址。

#!/bin/sh
YOUR_IP="$(w3m -dump http://checkip.dyndns.org)"

echo "Current ip:" "$YOUR_IP"
if [ "$YOUR_IP" == "Current IP Address: XX.XX.148.73" ]
then
        echo "UP VPN is active :)"
else
        echo "DOWN VPN is disconnect :("
        sh /opt/etc/init.d/S20openvpn restart
fi

echo "$(date +"%d / %m / %Y")"
echo "$(date +"%H : %M : %S")"
echo "------------------------"
exit

谁能告诉我为什么 if else 语句不运行。在我的日志中,我得到以下信息。我猜该语句必须出错,否则它会回显某些内容,而目前它没有。这可能只是一个语法错误,或者 w3m -dump 在运行 if else 之前没有得到它的结果,我不知道足够的 UNIX 来调试。任何帮助都会很棒。

Current ip: Current IP Address: XX.XX.148.73
16 / 05 / 2012
18 : 50 : 01

【问题讨论】:

  • echo "$(...)" 总是多余的。就做date +"%d / %m / %Y"

标签: unix if-statement


【解决方案1】:

两种修复方法:

  1. 使用 /bin/bash(如果可能的话)
  2. 使用“=”而不是“==”进行比较

这个 SO 问题提供了更多信息/背景[ :Unexpected operator in shell programming

【讨论】:

  • 虽然使用 '=' 而不是 '==' 是正确的,但这并不能解决问题。如果条件句中的语法无效,则应该执行语句的 else 部分。
  • @WilliamPursell else 部分可以独立于if 执行吗?不确定脚本是如何详细解释的,但如果 if 的语法被破坏,那不是延伸到整个语句的其余部分吗?只是好奇。
  • 试试=====。 shell 尝试调用该命令,如果出现语法错误,该命令应该会失败。 shell 通过运行else 子句中的命令来响应该故障。语法错误不是shell语法错误,而只是传递给test[命令的参数列表中的错误。
  • @WilliamPursell Cool .. 学到了一些新东西,谢谢。事实证明,在原始脚本(和我的测试脚本)中,我不断收到“意外的操作员错误”,但else 子句确实总是执行。我想我太专注于寻找错误的根源,以至于在错误消息之后我没有注意这个额外的输出。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多