2017-02-26 75 views
2

一切正常。但它給出了一個錯誤。我無法解決它。shell - 代碼正確,但不起作用

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']; 
} 
?> 

結果:

[email protected]:~# 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 

https://i.stack.imgur.com/jNMNq.jpg

+0

也許嘗試在你的病情來改變單一=用-eq運算符和刪除「字? –

+1

@ R.CanserYanbakan我試過,但它不能正常工作。 –

+0

@ R.CanserYanbakan這些建議既不是正確的。 – chepner

回答

3

哦,非常感謝您發佈代碼。 那麼,試圖看到自己的兩個字符串之間的差異,結果發現問題是所謂的Byte Order Mark (BOM)。有關更多信息,請參閱此答案:https://stackoverflow.com/a/3256014

由捲曲返回的字符串,它管道到一個十六進制轉儲時,表明這一點:

$ 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,或者您可以將捲曲輸出傳遞到cut -c 2-,或者甚至可以在curl行後面進行簡單替換:mlicense="${mlicense:1}"。而且,爲了確保我們剝離的是BOM,我們可以使用兩行替換:bom="$(echo -en '\xEF\xBB\xBF')"; mlicense="$(echo -n "${mlicense#${bom}}")",或者甚至將它們變成一個:mlicense="$(echo -n "${mlicense#$(echo -en '\xEF\xBB\xBF')}")"