我在最后一天工作了一个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中执行我得到“相等”(正确答案)。在日志中重新启动后,我得到“不相等”。
有人可以告诉我原因吗?
答案 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
。它将帮助您了解系统的启动和故障情况。