1

我在最后一天左右编写了一个 Bash 脚本,并直接在 shell 上运行和调试它。
最终脚本将在 Ubuntu 服务器重新启动时执行。
我已经开始对此进行测试,但是我的脚本给了我与预期不同的结果。我已将其缩小为“或条件”,并重写了一个更简单的脚本来测试这个异常:

已在 /etc/rc.local 中调用此脚本,并将输出重定向到日志文件 (log/reboot.log)。

我的脚本中有这个(作为测试):

 #!/bin/bash 
YESTERDAY=20131103
SYS_DATE=20131104
LAST_START=20131104

if [[ $LAST_START = $YESTERDAY || $LAST_START = $SYS_DATE ]];
then
    echo "is equal"
else
   echo "is not equal"
fi

在 shell 中执行我得到“相等”(正确答案)。在日志中重新启动后,我得到“不相等”。

有人能告诉我为什么吗?

4

1 回答 1

3

我猜这里,

但是你是否意识到你/bin/sh的不是你的SHELL。在 UBUNTU 和 Debian 中,/bin/sh是 DASH,您的登录 shell 是 BASH。所以它可能与你的[[ ]]BASH 语法有关。

您是否在脚本顶部:

#!/bin/sh

或者

#!/bin/bash

[[

[[ 内置是一个 bashism,并且比 [ (又名测试)具有更好的语义定义。但是,使用 [ 代替仍然是相当合理的,并且可移植脚本必须这样做。请注意,参数处理并不完全相同。如上所述,使用 = 而不是 ==。

看这里:

https://wiki.ubuntu.com/DashAsBinSh

在这里做事的正确方法

最好的解决方案实际上是将您的脚本放入/etc/init.d并将其链接到运行级别 6。这是重新启动时执行的运行级别。man 8 init当你有空闲时间时,你应该考虑阅读。它将帮助您了解系统是如何启动和关闭的。

于 2013-11-05T10:10:12.900 回答