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
答案 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