您好我正在尝试在Tomato路由器中设置一个脚本,当它运行时,它将回显一个取决于小时的值。脚本如下:
HOUR=$(date +"%k")
if [[ $HOUR >= 0 ] && [ $HOUR < 12 ]];then
echo 'Morning'
else
echo 'Evening'
fi
然而,当我执行脚本时,返回以下内容:
/tmp/.wxNL0Yv3: line 11: can't create =: Read-only file system
Evening
如何解决?我很确定我没有要求访问任何只读文件
答案 0 :(得分:2)
如果我们假设你的shell不是真正的bash,我们会改变它:
hour=$(date +"%k")
if [ "$hour" -ge 0 ] && [ "$hour" -lt 12 ]; then
echo 'Morning'
else
echo 'Evening'
fi
如果你的shell真的 bash,那么chepner的回答更合适。
答案 1 :(得分:1)
您的if
声明的条件应为
if [[ $HOUR -ge 0 && $HOUR -lt 12 ]]; then
双括号不是嵌套括号,而是条件命令的语法。此外,对于数字比较,您需要使用-ge
和-lt
而不是字符串运算符<
和(不存在的)>=
。
>=
被解释为尝试将命令的输出重定向到文件=
,并且您处于只读文件系统,因此无法创建新文件。在参数扩展之前处理重定向,因此shell还不知道$HOUR
不会扩展为命令名。
对于更自然的表达式,您可以使用算术命令((...))
:
if (( $HOUR >= 0 && $HOUR < 12 )); then
在算术命令中,变量的美元符号是可选的,但我喜欢使用它,因为它允许bash
为未定义的变量抛出错误,而不是将它们视为设置为0。