Shell脚本适用于其他日期,但不适用于2013-12-08和2013-12-09日期 以下是我正在尝试的代码 - :
dateToLook=`(date +%d-%m-%Y --date='1 days ago')`
dateToLookY=`(date +%Y-%m-%d --date='1 days ago')`
last=`grep "cricket" /root/live/test.csv | sed 's/"//g'| awk 'BEGIN { FS = "," } ; { print $8 }' | awk 'BEGIN { FS = " " } ; { print $1 }' | grep "$dateToLookY" | head -1`
d=`(date +%Y-%m-%d --date='1 days ago')`
echo $last--$d
if [[ $d -eq $last ]];
then
echo "deepak"
else
echo "condition does not match"
fi
当这两个变量回显时,它们给出相同的值,但如果在“if”条件下进行比较则返回false,否则执行条件。 下面是我正在尝试使用test.csv的文件 - :
"@yahoo.com","123","40","M","i","1.3","2013-11-19","2013-12-08"
"@yahoo.com","123","40","M","i","1.3","2013-11-19","2013-12-08"
我曾经浏览过网络而不知道为什么会发生同样的代码工作时我在Test.csv中用2013-12-06修改日期
答案 0 :(得分:1)
if [[ $d -eq $last ]];
测试整数相等,你想在这里进行字符串测试,如
if [[ $d = $last ]];
有点令人惊讶的是,你的shell在这里没有给你一个合理的错误信息,当我在(一个相当古老的)bash中尝试这个时,我得到了
[[: 2013-12-08: value too great for base (error token is "08")
解释:[[看到数字表达式中的数字和每个以0开头的C约定数字被解释为八进制,这解释了为什么06和07将起作用,08和09不起作用。 [[
也是十六进制的,请参阅here
但是在这种情况下你想要字符串比较,所以解释的最后部分实际上并不真正相关,它只是解释了错误。
[[...取决于条件表达式表达式的评估,返回0或1的状态。表达式由下面在Bash条件表达式中描述的原色组成。
和条件表达式章节:
string1 == string2
string1 = string2
True if the strings are equal. ‘=’ should be used with the test command
for POSIX conformance.