【发布时间】:2012-12-12 14:11:41
【问题描述】:
我编写了一个简短的脚本,它从远程主机上的 /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
我尝试了多种比较方法,但没有成功。任何想法表示赞赏。谢谢!
更新
在应用 cmets 的一些建议来检查空白之后,我可以通过 echo 语句看到更多信息。不太清楚这是怎么发生的 0_o
#>echo test${TODAY}more
test12122012more
#>echo test${EXPIREDATE}more
more12122012
【问题讨论】:
-
尝试引用字符串:
if [ "$TODAY" = "$EXPIREDATE" ]. -
你能通过
cat thing | od -c发送你的程序的输出吗? -
字符串中可能有空格或换行符。而不是
echo "$TODAY",打印echo "test${TODAY}test",它将显示空白。 -
@spaceknarf:如果你不在 var 前后放置相同的东西会更有趣,以防有 Windows 行结尾的东西挡住了路。如果这就是我们这里的内容,并且您回显
"test${EXPIREDATE}foo",则输出将为foot1212...:) -
@unwind 我试过两边的引号都没有成功。感谢您的建议,我在 var 之前和之后添加了行,它肯定揭示了一个问题。见下文
test12122012word word12122012
标签: bash if-statement compare