失败的bash if语句

时间:2012-12-16 00:29:22

标签: 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

1 个答案:

答案 0 :(得分:6)

我是否正确理解您只想在晚上8点到午夜之间运行gtk-redshift?如果是这样,问题在于这种表示法:

$(...)

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

redshift=($(gtk-redshift -l -31.9530044:115.8574693))

运行命令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