我正在研究一个shell脚本,该脚本从网页中删除日期,然后检查它是否在当前日期的最后三天(在Cygwin中运行它)。如果测试通过,它只是回声“通过”,如果失败,它会回应“失败”;Shell脚本比较日期
然而,当我运行我的脚本,我得到以下几点:
integer expression expected: 1317618000
FAIL
下面是脚本:
updateStr=$(curl "http://www.mywebsite.com" | grep "Last Update")
dateStr=(`echo $updateStr | sed -e 's/.*Last Update: \([^<]*\)<.*/\1/'`)
update=$(date -d "$dateStr" +%s)
epoch=$(date -d "-3 days ago" +%s)
test "$update" -ge "$epoch" && echo "PASS" || echo "FAIL"
在这个问题上是什么任何想法?
编辑
这里是关于脚本运行bash -x
结果:
$ bash -x check_date.sh
++ curl http://www.mywebsite.com
++ grep 'Last Update'
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 6542 100 6542 0 0 789 0 0:00:08 0:00:08 --:--:-- 1544
+ updateStr=' <span style="float:right">Last Update: 10/3/2011 2:
'8:45 AM</span></p>
++ echo '<span' 'style="float:right">Last' Update: 10/3/2011 2:58:45 'AM</span><
'p>
++ sed -e 's/.*Last Update: \([^<]*\)<.*/\1/'
' dateStr='(10/3/2011 2:58:45 AM)
' +%ste -d '(10/3/2011 2:58:45 AM)
+ update=$'1317618000\r'
++ date -d '-3 days ago' +%s
+ epoch=$'1317938194\r'
+ test $'1317618000\r' -ge $'1317938194\r'
: integer expression expected1317618000
+ echo FAIL
FAIL
更新
我试图消除出现在日期输出回车,但它仍然没有工作。以下是更新后的脚本:
updateStr=$(curl "http://mywebsite.com" | grep "Last Update")
dateStr=$(echo $updateStr | sed -e 's/.*Last Update: \([^<]*\)<.*/\1/')
update=$(date -d "$dateStr" +%s | tr -d '\r')
epoch=$(date -d "3 days ago" +%s | tr -d '\r')
echo "Last Update: $update"
echo "Epoch Date: $epoch"
test "$update" -ge "$epoch" && echo "PASS" || echo "FAIL"
,这里是结果:
$ bash -x ./check_date.sh
++ curl http://mywebsite.com
++ grep 'Last Update'
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 6542 100 6542 0 0 17398 0 --:--:-- --:--:-- --:--:-- 19704
+ updateStr=' <span style="float:right">Last Update: 10/6/2011 2:
'0:02 AM</span></p>
++ echo '<span' 'style="float:right">Last' Update: 10/6/2011 2:40:02 'AM</span><
'p>
++ sed -e 's/.*Last Update: \([^<]*\)<.*/\1/'
' dateStr='10/6/2011 2:40:02 AM
' +%ste -d '10/6/2011 2:40:02 AM
++ tr -d '\r'
+ update=$'1317886802\r'
++ date -d '-3 days ago' +%s
++ tr -d '\r'
+ epoch=$'1318184767\r'
' echo 'Last Update: 1317886802
Last Update: 1317886802
' echo 'Epoch Date: 1318184767
Epoch Date: 1318184767
+ test $'1317886802\r' -ge $'1318184767\r'
: integer expression expected: 1317886802
+ echo FAIL
FAIL
你可以显示'echo $ dateStr'中的内容吗? –
你可以在你的#!/ bin/bash中添加-x,以便在每个命令运行时打印出来吗? – frankc
@frankc:查看更新的问题。 –