失败的bash if语句

Swi*_*ick 3 bash if-statement

if语句似乎无法正常运行,无论if语句结果如何,程序都会启动.我错过了什么?

#!/bin/bash

dtime=($(date |cut -c12-13))
sevenO="19"
redshift=($(gtk-redshift -l -31.9530044:115.8574693))

if ( [[ "$dtime" -gt "$sevenO" ]])
then
    $redshift
fi
Run Code Online (Sandbox Code Playgroud)

rua*_*akh 6

我是否理解你只想在gtk-redshift晚上8点到午夜之间跑步?如果是这样,问题是这种表示法:

$(...)
Run Code Online (Sandbox Code Playgroud)

... 立即运行命令,并计算其输出; 所以这句话:

redshift=($(gtk-redshift -l -31.9530044:115.8574693))
Run Code Online (Sandbox Code Playgroud)

运行该命令gtk-redshift -l -31.9530044:115.8574693,然后将该变量设置为redshift包含该命令输出的数组.(由于周围的数组(...).请注意,在Bash中,括号不仅仅用于分组.它们具有实际行为 - 例如,在这种情况下,创建一个数组 - 并且你不应该在你不喜欢的地方使用它们我想要那些行为.)

您可以将Bash脚本简化为:

#!/bin/bash

if [[ "$(date +%k)" -ge 20 ]] ; then
    gtk-redshift -l -31.9530044:115.8574693
fi
Run Code Online (Sandbox Code Playgroud)

  • 请注意,如果小时为08或09,这将使您遇到麻烦 - 您将收到八进制错误.使用`date +%k`或使用`if((10#$(date +%H)> = 20)强制base-10) (2认同)