2014-02-26 71 views
2

我從服務器(Ubuntu 12.04)獲取主機名和IP地址,如here解釋。它工作正常。過了一段時間,我意識到服務器在離線狀態下返回「(none)」作爲主機名。現在我試圖通過比較主機名和「(none)」來消除這個錯誤。我試過所有這些(*),但它們都不起作用:

-- Getting hostname here  
hostname=$(grep "host-name" /var/lib/dhcp/dhclient.${interface}.leases | tail -n1 | cut -d"\"" -f2 | cut -d"." -f1) 

-- Trying to compare it with "(none)" 
    * if [ "$hostname" != "(none)" ] then ... else ... fi 
    * if [[ $hostname != "(none)" ]] then ... else ... fi 
    * nouser="(none)" if [ "$hostname" != "$nouser" ] then ... else ... fi 

我在做什麼錯? Thx尋求幫助。

+0

'if [「$ hostname」!=「(none)」];那麼... else ... fi'注意'''''''''''' – maverik

+0

之後的符號我也試過了。它沒有奏效。還有,如果[]聲明沒有結束「;」在代碼中,它工作沒有問題。 –

+0

你看到了什麼結果? – armandino

回答

1

你需要一個分號後]

if [ ... ]; then ...; else ...; fi 

或換行符:

if [ ... ] 
then 
    ... 
else 
    ... 
fi 
0

使用$HOSTNAME - 我的推理,它可以將用戶驗證等$變量:

維爾夫@補償:〜$回聲$主機名

維爾夫@補償:〜$回聲$ HOSTNAME
補償
維爾夫@補償:〜$

出於某種原因,$hostname似乎不工作(Ubuntu的13.10,沒有試過其他Linux版本)

+1

你對環境變量是正確的,但是OP是*建立一個本地''nix是區分大小寫的,所以'$ hostname'和'$ HOSTNAME'是不同的變量。 – admdrew

+1

@admdrew - 我想這很理智,否則'$ iii'和'$ III'將會是相同的變量...除非土耳其語語言環境設置,當我和我是不同的字母 –

+0

@MaciejPiechotka不知道你的意思! – admdrew

1

這應該工作;

hostname="(foo)" 
if [ "$hostname" == "(foo)" ]; then echo "equals"; else echo "not equals"; fi