2013-02-13 1115 views
1

我已經創建了一個腳本來更新iptables中的一些ipaddress。因此我正在描述我正面臨的問題。shell腳本比較兩個變量

問題:

  1. 比較腳本
  2. 中的兩個變量之間沒有發生在腳本我需要執行一個命令即結束;服務重啓/停止等,並且在執行腳本時這些命令的輸出應該是可見的。

1)這裏我比較兩個變量字符串:

BASE=172.31.0.0 
CMD=172.31.1.0 

if [[ "$CMD" == "$BASE" ]]; then 
    echo "ip are same" 
else 
    echo "not matched" 
fi 

但在執行上面的腳本沒有響應/輸出。這裏沒有比較沒有發生......只是建議解決此問題的最佳解決方案。

2)執行腳本之後我需要重新啓動的iptables:

BASE=172.31.0.0 
CMD=172.31.1.0 

if [[ "$CMD" == "$BASE" ]]; then 
    echo "ip are same" 
else 
    echo "not matched" 
fi 

service iptables restart 
iptables -nvL 

的腳本應顯示的最後兩行(命令)的輸出。請告訴我最好的解決方案,以及如何以最好的方式做到這一點。

+2

本文發表獎項。祝你好運 – 2013-02-13 12:35:33

+4

所以......你正在使用什麼外殼? bash,還是sh?你知道他們不同,對吧?因爲這樣,該腳本在bash中工作並在sh中產生錯誤。這兩者都不是你正在報告的內容。 – ghoti 2013-02-13 12:45:16

+0

感謝您的回覆,我正在使用bash腳本,並試圖通過./script.sh來執行此腳本。 – suboss87 2013-02-13 14:37:56

回答

1

這很奇怪。這應該工作,所以如果它不工作,你忘了提及一些重要的東西。

該腳本是如何執行的?你只是輸入./script或者是由一些服務(如cron)執行?

下面是一些建議調試:

  1. 健全檢查:看是否bash的工作(也許你的登錄shell是不是bash的,所以你沒注意到)。在終端運行:

    /bin/bash -c 'echo hello world' 
    
  2. 它打印hello world,對不對?這個怎麼樣:

    /bin/bash -c 'BASE=172.31.0.0; CMD=172.31.1.0; if [[ "$CMD" == "$BASE" ]]; then echo "ip are same"; else echo "not matched"; fi' 
    

    如果上述任何不起作用,你有你的bash安裝問題。

  3. 而是與./script.sh執行你的腳本中,這樣運行:

    /bin/bash script.sh 
    
  4. 什麼都沒有?運行這個:如果它的東西,如結束

    file script.sh 
    

    「與CRLF行結束符」,然後cdarke釘它:該文件在Windows上創建了一個帶有不恰當的工具。在Linux上重新創建它或使用dos2unix。但無論如何,我對此表示懷疑,因爲以CRLF結束的文件,我得到這個印刷:

    bash: ./script.sh: /bin/bash^M: bad interpreter: No such file or directory 
    

    ,而不是什麼都沒有。

  5. 把那些該行上的文件的開頭:

    set -x 
    

    (!下面#/斌/慶典,如果你有的話)。這可以確保打印出一條調試跟蹤信息,並顯示每條命令執行的情況。

  6. 如果仍然顯示沒有什麼..把這個在你的腳本(以下集-x如果你把它):

    touch /tmp/hi-this-is-strange 
    

    然後檢查是否有的/ tmp/HI-這是你運行腳本後奇怪的文件。

+0

感謝您的及時回覆...您可以讓我知道如何刪除「。」在IP地址...例如)172.31.0.0然後通過awk我需要得到輸出爲1723100如何通過使用「awk」工具來做到這一點..在此先感謝。 – suboss87 2013-02-14 06:21:29

+0

我覺得sed更適合這個任務:'echo 172.31.0.0 | sed's /\.// g'' – darque 2013-02-15 01:35:52

+0

@ user1565390我的回覆中有哪些內容有用?我仍然不明白你的問題是什麼(並且可以隨意編輯你的問題以添加更多信息),但是如果我的回答解決了問題,請接受它。 – darque 2013-02-15 05:12:54