“有麻烦”;如果等式";Bash中的语句
我编写了一个简短的脚本,从远程主机上的/etc/sudoers(##Expires 12122012)中提取一行,然后使用“有麻烦”;如果等式";Bash中的语句,bash,if-statement,compare,Bash,If Statement,Compare,我编写了一个简短的脚本,从远程主机上的/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"` EXPIRED
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试验
我尝试了多种不同的比较方法,但没有成功。欢迎提出任何意见。谢谢
更新在应用了注释中关于检查空白的一些建议之后,我能够看到更多关于echo语句的内容。不太清楚这是怎么发生的
#>echo test${TODAY}more
test12122012more
#>echo test${EXPIREDATE}more
more12122012
您的远程文件正在使用CRLF换行符。您需要通过
tr
传递文本,以去除CR
... | tr -d '\r'
尝试引用字符串:
如果[“$TODAY”=“$EXPIREDATE”]
。您可以通过cat thing | od-c
发送程序的输出吗?字符串中可能有空格或换行符。与其打印echo“$TODAY”
,不如打印echo“test${TODAY}test”
,它将显示空白。@spaceknarf:如果不在变量前后放置相同的内容,以防出现windows行结尾的情况,这会更有趣。如果这就是我们这里的内容,并且您回显“test${EXPIREDATE}foo”
,则输出将是foot1212…
:)@unwind我尝试了两边的引号,但没有成功。谢谢你的建议,我在var之前和之后添加了行,这肯定暴露了一个问题。请参见下面的test12122012单词12122012
就是它做到了!非常感谢你。我一直在失去理智,试图让它发挥作用:)
... | tr -d '\r'