Bash 番茄路由器可以';t create=:只读文件系统

Bash 番茄路由器可以';t create=:只读文件系统,bash,time,readonly,router,Bash,Time,Readonly,Router,嗨,我正在尝试在番茄路由器中设置一个脚本,当它运行时,它将根据小时回送一个值。脚本编写如下: HOUR=$(date +"%k") if [[ $HOUR >= 0 ] && [ $HOUR < 12 ]];then echo 'Morning' else echo 'Evening' fi 如何修复它?我很确定我没有要求访问任何只读文件您的if语句的条件应为 if [[ $HOUR -ge 0 && $HOUR -lt 12 ]]

嗨,我正在尝试在番茄路由器中设置一个脚本,当它运行时,它将根据小时回送一个值。脚本编写如下:

HOUR=$(date +"%k")

if [[ $HOUR >= 0 ] && [ $HOUR < 12 ]];then
    echo 'Morning'
else
    echo 'Evening'
fi

如何修复它?我很确定我没有要求访问任何只读文件

您的
if
语句的条件应为

if [[ $HOUR -ge 0 && $HOUR -lt 12 ]]; then
双括号不是嵌套括号,而是条件命令的语法。此外,对于数值比较,您需要使用
-ge
-lt
而不是字符串运算符
=

顺便说一下,
=
被解释为试图将命令的输出重定向到文件
=
,并且您位于只读文件系统上,因此无法创建新文件。重定向是在参数扩展之前处理的,因此shell还不知道
$HOUR
没有扩展到命令名

要获得更自然的表达式,可以使用算术命令
(…)

如果($HOUR>=0&$HOUR<12));然后

在算术命令中,变量的美元符号是可选的,但我喜欢使用它,因为它允许
bash
为未定义的变量抛出错误,而不是将它们视为设置为0。

if语句的条件应为

if [[ $HOUR -ge 0 && $HOUR -lt 12 ]]; then
双括号不是嵌套括号,而是条件命令的语法。此外,对于数值比较,您需要使用
-ge
-lt
而不是字符串运算符
=

顺便说一下,
=
被解释为试图将命令的输出重定向到文件
=
,并且您位于只读文件系统上,因此无法创建新文件。重定向是在参数扩展之前处理的,因此shell还不知道
$HOUR
没有扩展到命令名

要获得更自然的表达式,可以使用算术命令
(…)

如果($HOUR>=0&$HOUR<12));然后

在算术命令中,变量的美元符号是可选的,但我喜欢使用它,因为它允许
bash
为未定义的变量抛出错误,而不是将它们视为设置为0。

if语句的条件应为

if [[ $HOUR -ge 0 && $HOUR -lt 12 ]]; then
双括号不是嵌套括号,而是条件命令的语法。此外,对于数值比较,您需要使用
-ge
-lt
而不是字符串运算符
=

顺便说一下,
=
被解释为试图将命令的输出重定向到文件
=
,并且您位于只读文件系统上,因此无法创建新文件。重定向是在参数扩展之前处理的,因此shell还不知道
$HOUR
没有扩展到命令名

要获得更自然的表达式,可以使用算术命令
(…)

如果($HOUR>=0&$HOUR<12));然后

在算术命令中,变量的美元符号是可选的,但我喜欢使用它,因为它允许
bash
为未定义的变量抛出错误,而不是将它们视为设置为0。

if语句的条件应为

if [[ $HOUR -ge 0 && $HOUR -lt 12 ]]; then
双括号不是嵌套括号,而是条件命令的语法。此外,对于数值比较,您需要使用
-ge
-lt
而不是字符串运算符
=

顺便说一下,
=
被解释为试图将命令的输出重定向到文件
=
,并且您位于只读文件系统上,因此无法创建新文件。重定向是在参数扩展之前处理的,因此shell还不知道
$HOUR
没有扩展到命令名

要获得更自然的表达式,可以使用算术命令
(…)

如果($HOUR>=0&$HOUR<12));然后

在算术命令中,变量的美元符号是可选的,但我喜欢使用它,因为它允许
bash
为未定义的变量抛出一个错误,而不是将它们视为设置为0。

如果我们假设您的shell不是真正的bash,我们将其更改为:

hour=$(date +"%k")
if [ "$hour" -ge 0 ] && [ "$hour" -lt 12 ]; then
    echo 'Morning'
else
    echo 'Evening'
fi

如果您的shell真的是bash,chepner的回答更合适。

如果我们假设您的shell不是真正的bash,我们会将其更改为:

hour=$(date +"%k")
if [ "$hour" -ge 0 ] && [ "$hour" -lt 12 ]; then
    echo 'Morning'
else
    echo 'Evening'
fi

如果您的shell真的是bash,chepner的回答更合适。

如果我们假设您的shell不是真正的bash,我们会将其更改为:

hour=$(date +"%k")
if [ "$hour" -ge 0 ] && [ "$hour" -lt 12 ]; then
    echo 'Morning'
else
    echo 'Evening'
fi

如果您的shell真的是bash,chepner的回答更合适。

如果我们假设您的shell不是真正的bash,我们会将其更改为:

hour=$(date +"%k")
if [ "$hour" -ge 0 ] && [ "$hour" -lt 12 ]; then
    echo 'Morning'
else
    echo 'Evening'
fi

如果您的shell真的是bash,chepner的回答更合适。

=
请求对名为
=
的文件进行写访问。它不是一个比较运算符(除非您在数学上下文中)。顺便问一下,您是否完全确定您的shell真的是bash,而不是ash或busybox提供的shell?在空间非常宝贵的系统上使用实际的bash是非常罕见的,如果您使用了真正的bash,最好的答案与不使用bash的最佳答案并不相同……另一方面,所有大写变量名都保留给环境变量和内置变量。对于不导出的本地变量,小写变量名更符合最佳实践(并防止与环境发生冲突的可能性)。
=
要求对名为
=
的文件进行写访问。它不是一个比较运算符(除非您在数学上下文中)。顺便问一下,您是否完全确定您的shell真的是bash,而不是ash或busybox提供的shell?这是非常有趣的