if...elif脚本执行的问题

mcumsigscr
if...elif脚本执行的问题

各位大侠,最近写了个脚本,由于自己shell方面不是很熟悉,所以请教大家一个问题:
脚本内容如下:

#!/bin/bash

EVTYPE=`cat /root/abc.conf | grep -i abcde | awk -F "=" '{print $2}' | tr A-Z a-z`

echo $EVTYPE;

if [ $EVTYPE = aaa ];then

        echo "This is aaa Platform!"

elif [ $EVTYPE = bbb ];then

       echo "This is bbb platform!"

else
       echo "This is wrong!Please check it!"
fi

exit

但是执行结果总是This is wrong!Please check it!
不知道问题出在哪里,请指教。

waker
#!/bin/bash -x
自己观察一下

walkerxk
建议把echo $EVTYPE;改成echo $EVTYPE|xxd;也许有不可见字符,比如0D,还有bash中不需要分号结尾。

lyk1009
回复 #1 mcumsigscr 的帖子

我试了下:
#!/bin/bash

EVTYPE=`cat /etc/redhat-release |grep -i tikanga | awk -F'[()]' '{print $2}' |tr A-Z a-z`

echo $EVTYPE;

if [ $EVTYPE = tikanga ];then

        echo "This is tikanga Platform!"

elif [ $EVTYPE = bbb ];then

       echo "This is bbb platform!"

else
       echo "This is wrong!Please check it!"
fi

exit

结果:
tikanga
This is tikanga Platform!  :mrgreen:

walkerxk
我这测试正常,用的文件内容是abcde=aaa

mcumsigscr
回复 #2 waker 的帖子

++ /bin/cat /root/abc.conf
++ grep -i abcde
++ awk -F = '{print $2}'
++ tr A-Z a-z
+ EVTYPE=$bbb/r'
+ echo $'bbb/r'
bbb
+ '[' $'bbb/r' = aaa ']'
+ '[' $'bbb/r' = bbb ']'
+ echo 'This is wrong!Please check it!'
This is wrong!Please check it!
+ exit

请问这个是怎么回事?请大侠指教。

[[i] 本帖最后由 mcumsigscr 于 2008-6-30 15:58 编辑 [/i]]

walkerxk
有/r
果然是0D的问题。
dos2unix urfile

mcumsigscr
回复 #7 walkerxk 的帖子

结果还是一样

walkerxk
顺便说一下,windows下换行实际上是回车加换行
              二进制码 转义符
windows 0D0A    /r/n
linux        0A        /n
mac         0D        /r

walkerxk
改成EVTYPE=`cat /root/abc.conf |sed 's//r//g' |grep -i abcde | awk -F "=" '{print $2}' | tr A-Z a-z`试试。
还有,建议用$(cat /root/abc.conf |sed 's//r//g' |grep -i abcde | awk -F "=" '{print $2}' | tr A-Z a-z)这样的形式,免得别人看成单引号了。

mcumsigscr
回复 #10 walkerxk 的帖子

非常感谢。好用了。请教一下,是为什么呢

walkerxk
sed 's//r//g' 这句语句是去掉所有的回车,因为回车会干扰=的判断,而且你看不到回车。至于dos2unix不行的原因估计是你的回车出现在行的中间,所以不能处理。

mcumsigscr
[quote]原帖由 [i]walkerxk[/i] 于 2008-6-30 16:13 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8703972&ptid=1184662][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
sed 's//r//g' 这句语句是去掉所有的回车,因为回车会干扰=的判断,而且你看不到回车。至于dos2unix不行的原因估计是你的回车出现在行的中间,所以不能处理。 [/quote]

非常感谢。

以前都是没有问题的。但是不知道为什么这次就会有问题。

walkerxk
那就不知道了,你的abc.conf是什么平台创建的?windows?

mcumsigscr
回复 #14 walkerxk 的帖子

linux_fc6.sed结尾的/g是什么意思?我看sed替换语句的结尾都是这个?

无声无息
global

否则只操作第一次匹配就结束了

walkerxk
g是全局,就是这一行的所有值都操作,如果没有的话默认只对第一个操作。
同样的操作还有i(忽略大小写)p(打印)
你可以试试:
echo ABCabc|sed 's/abc/123/i'
echo ABCabc|sed 's/abc/123/p'
echo ABCabc|sed -n 's/abc/123/p'

mcumsigscr
非常感谢。