Bash脚本在重启时给我一个不同的结果?

时间:2013-11-05 10:04:30

标签: bash ubuntu reboot

我在最后一天工作了一个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中执行我得到“相等”(正确答案)。在日志中重新启动后,我得到“不相等”。

有人可以告诉我原因吗?

1 个答案:

答案 0 :(得分:3)

我猜这里,

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

你在剧本的顶端是否正确:

#!/bin/sh

#!/bin/bash
  

[[

     

[builtin是一种基础,并且有一些更好定义的语义   比[(a.k.a.test)。但是,使用[仍然很合理]   相反,便携式脚本必须这样做。注意参数处理   不太一样;如上所述,使用=而不是==。

见这里:

https://wiki.ubuntu.com/DashAsBinSh

在这里做事的正确方法

最佳解决方案实际上是将您的脚本放在/etc/init.d中并将其链接到运行级别6.这是重新启动时执行的运行级别。当你有空余时间时,你应该考虑阅读man 8 init。它将帮助您了解系统的启动和故障情况。