1

我编写了一个简短的脚本,它从远程主机上的 /etc/sudoers (## Expires 12122012) 中提取一行,然后将其与今天的日期进行比较,使用date +%d%m%Y. 即使显示分配给它们的变量时这两个值看起来相同,但 if 语句永远不会将它们显示为匹配项。脚本和输出如下。额外的 echo 语句用于验证实际匹配的变量。

#!/bin/bash
TODAY=`date +%d%m%Y`
EXPIRES=`ssh -t hostname "grep Expires /etc/sudoers"`
EXPIREDATE=`echo $EXPIRES | awk -F " " '{ printf $3 }'`

if [ $TODAY = $EXPIREDATE ]
    then
            echo "This matches"
            exit
    else
            echo "this doesn't match"
            echo "$TODAY"
            echo "$EXPIREDATE"
            exit
fi
exit

输出:sh 测试

this doesn't match
12122012
12122012

我已经尝试了比较的多种变体,但没有运气。任何想法表示赞赏。谢谢!

更新
应用评论中的一些建议来检查空格后,我可以通过 echo 语句看到更多信息。不太清楚这是怎么发生的 0_o

#>echo test${TODAY}more
   test12122012more
#>echo test${EXPIREDATE}more
   more12122012
4

1 回答 1

2

您的远程文件正在使用 CRLF 换行符。您需要传递您的文本tr才能删除 CR。

... | tr -d '\r'
于 2012-12-12T15:07:02.087 回答