2011-05-20 132 views
0

如果日期介于08:03和14:03之间,那么我想要执行某些操作。用于日期操作的Shell脚本

但是当我尝试

dt=`date +%H:%M` 


if [ $dt -eq 08:03 ] 
then 
echo $dt > msize.txt 
#echo "iam im 1 if" 
fi 

这是行不通的。该文件在每分钟内都在crontab中运行。请提出建议

回答

2

运算符-eq用于比较整数,而不是字符串。如果你想比较字符串,你需要使用==。试试这个:

if [ $dt == '08:03' ] 
then 
# Rest of script 
+0

'=='用于bash。对于外部'test'命令,使用'='。 – 2011-05-20 18:04:26

+0

@glenn的权利,这是假设他使用bash(这是几乎所有的Linux系统使用,除非他们使用zsh,这是相同的)。这几乎适用于除ksh之外的所有内容。 – 2011-05-20 18:05:21

3

正如雷夫在对方的回答指出,-eq是数字,你需要使用==比较字符串。但是你说过你想知道时间是在两次之间,而不是完全等于一次。在这种情况下,你应该使用<操作:

if [ '08:03' \< "$dt" -a "$dt" \< '14:03'] 

,或者更方便:

if [[ '08:03' < "$dt" && "$dt" < '14:03']] 

注意,这些运营商没有在POSIX规定,但工作在大多数shell(bash中,Korn Shell程序,zsh的)。如果你使用的是像Dash这样的最小外壳(这是在Ubuntu上的/bin/sh),只要小心使用它们即可。