我使用curl检查我是否可以访问其中一个代理服务器上的特定文档。 如果检查代理是否是负载均衡器的成员,则会对该文件进行检查。
示例:
[root@PRX scripts]# curl http://`hostname`:8080/proxy/keepalive?file=/workspace/temp/1.txt
ppp
[root@PRX scripts]#
此输出是预期的。
如果我尝试比较此输出,则测试为假:
#!/bin/bash
tmp=$(curl http://$(hostname):8080/proxy/keepalive?file=/workspace/temp/1.txt)
echo $tmp
if [ "$tmp" = "ppp" ]; then
echo "Match"
else
echo "No match"
fi
我使用调试模式(bash -x
)运行脚本:
[root@PRX scripts]# bash -x testscript
+++ hostname
++ curl 'http://XXXXX.com:8080/proxy/keepalive?file=/workspace/temp/1.txt'
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 5 0 5 0 0 2326 0 --:--:-- --:--:-- --:--:-- 5000
+ tmp=$'ppp\r'
+ echo $'ppp\r'
ppp
+ [[ $'ppp\r' = ppp ]]
+ echo 'No match'
No match
[root@PRX scripts]#
我还尝试将curl
的输出写入/tmp/tmp
中的临时文件,然后cat
文件,但我得到相同的响应。您可以在调试输出中看到$tmp
变量,其中包含curl
的输出显示
tmp=$'ppp\r'
而不是
tmp='ppp'
任何人都可以对这个问题有所了解并解释这种行为吗? 提前谢谢,
答案 0 :(得分:2)
\r
是一个回车符,它就在那里,因为Web服务器返回DOS行终止符。
您可以使用tr
TMP=$(curl "http://$HOSTNAME:8080/proxy/keepalive?file=/workspace/temp/1.txt" | tr -d '\r')
if [[ $TMP = ppp ]]
then
echo "It's true"
fi