一切都很正常。但它给出了一个错误。我无法解决它。
try.sh :
#!/bin/sh
website="http://lastofdead.xyz"
ipaddress=$( ifconfig | grep -v 'eth0:' | grep -A 1 'eth0' | \
tail -1 | cut -d ':' -f 2 | cut -d ' ' -f 1)
mlicense=$(curl -s $website/lodscript/special/lisans.php?lisans)
if [ "$mlicense" = "$ipaddress" ];
then
echo "Positive"
else
echo "Negative"
fi
lisans.php :
<?php
if(isset($_GET['lisans'])) {
echo "188.166.92.168" . $_GET['lisans'];
}
?>
结果:
root@ubuntu:~# bash -x s.sh
+ website=http://lastofdead.xyz
++ cut -d ' ' -f 1
++ cut -d : -f 2
++ tail -1
++ grep -A 1 eth0
++ grep -v eth0:
++ ifconfig
+ ipaddress=188.166.92.168
++ curl -s 'http://lastofdead.xyz/lodscript/special/lisans.php?lisans'
+ mlicense=188.166.92.168
+ '[' 188.166.92.168 = 188.166.92.168 ']'
+ echo Negative
Negative
答案 0 :(得分:4)
哦,非常感谢您发布代码。 好吧,我试图看到自己两个字符串之间的差异,结果证明问题是Byte Order Mark (BOM)。有关此问题的详细信息,请参阅以下答案:https://stackoverflow.com/a/3256014。
curl返回的字符串在将其传输到十六进制转储时显示:
$ curl -s 'http://lastofdead.xyz/lodscript/special/lisans.php?lisans'
188.166.92.168
$ curl -s 'http://lastofdead.xyz/lodscript/special/lisans.php?lisans' | xxd -c 17 -g 1 -u
0000000: EF BB BF 31 38 38 2E 31 36 36 2E 39 32 2E 31 36 38 ...188.166.92.168
你能看到他们吗?这三个字节0xEF,0xBB,0xBF
是BOM的UTF-8表示,表示字符串的不同之处。上面链接的问题页面显示了一些删除它的方法,例如使用grep
,或者您可以将curl输出传递给cut -c 2-
,或者甚至通过curl
行之后的简单替换:{ {1}}。并且,为了确保我们剥离的是BOM,我们可以使用两行代替:mlicense="${mlicense:1}"
,或者甚至将它们变成一个:bom="$(echo -en '\xEF\xBB\xBF')"; mlicense="$(echo -n "${mlicense#${bom}}")"
。