Linux 比较两个日期值时出错

Linux 比较两个日期值时出错,linux,shell,Linux,Shell,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 = ","

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,并执行else条件。 下面是我正在使用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"
我在互联网上浏览了一下,没有发现为什么会发生这种情况。当我用2013-12-06修改Test.csv中的日期时,同样的代码也能工作

if [[ $d -eq $last ]];
测试整数相等性时,您需要在此处进行字符串测试,如中所示

if [[ $d = $last ]];
令人惊讶的是,您的shell在这里没有给出合理的错误消息,当我在(相当旧的)bash中尝试这个时,我发现

[[: 2013-12-08: value too great for base (error token is "08")
解释:[在数字表达式中看到数字,按照C约定,以0开头的数字被解释为八进制,这解释了为什么06和07可以工作,08和09不能工作。
[
也可以使用十六进制,请参见

但在本例中,您需要字符串比较,因此解释的最后一部分实际上并不相关,它只是解释了错误

从:

[[…根据条件表达式的计算返回0或1的状态。表达式由下面在Bash条件表达式中描述的原色组成

在条件表达式一章中:

string1 == string2
string1 = string2

    True if the strings are equal. ‘=’ should be used with the test command
    for POSIX conformance.
测试整数相等性时,您需要在此处进行字符串测试,如中所示

if [[ $d = $last ]];
令人惊讶的是,您的shell在这里没有给出合理的错误消息,当我在(相当旧的)bash中尝试这个时,我发现

[[: 2013-12-08: value too great for base (error token is "08")
解释:[在数字表达式中看到数字,按照C约定,以0开头的数字被解释为八进制,这解释了为什么06和07可以工作,08和09不能工作。
[
也可以使用十六进制,请参见

但在本例中,您需要字符串比较,因此解释的最后一部分实际上并不相关,它只是解释了错误

从:

[[…根据条件表达式的计算返回0或1的状态。表达式由下面在Bash条件表达式中描述的原色组成

在条件表达式一章中:

string1 == string2
string1 = string2

    True if the strings are equal. ‘=’ should be used with the test command
    for POSIX conformance.

我得到了这个错误[[:2013-12-08:value对于base来说太大了(错误标记为“08”),并且只对value 08和09有影响..看到我添加的解释,我不知怎么感觉到你会问这个:)好的,我同意,但我对shell脚本还不熟悉,所以我可能会犯一些未知的错误…请帮助我找到如何做到这一点…我想执行“if”当获取的日期与$dp中指定的日期匹配时,请再次阅读我的答案,因为您想要字符串相等,所以需要编写
if[[[$d=$last]];
而不是
if[[[$d-eq$last]];
来测试数字相等。我刚刚尝试了if[$d=$last]]它工作得很好…正如我读到的$d=$last意味着将$last值赋值给$d…如果我们在PHP和C的上下文中看到…可能是我错了,但这只是一个简单的疑问我得到了这个错误[[:2013-12-08:值太大,不适合基值(错误标记为“08”)仅针对值08和09..参见我添加的解释,我不知怎么地感觉到您要问这个:)好的,我同意,但我对shell脚本还不熟悉,所以我可能会犯一些未知的错误…请帮助找到我如何做到这一点…我想执行“如果”当获取的日期与$dp中指定的日期匹配时,请再次阅读我的答案,因为您想要字符串相等,所以需要编写
if[[[$d=$last]];
而不是
if[[[$d-eq$last]];
来测试数字相等。我刚刚尝试了if[$d=$last]]它工作得很好…正如我读到的$d=$last意味着将$last值赋值给$d…如果我们在PHP和C的上下文中看到…可能我错了,但这只是一个简单的疑问