2011-10-18 105 views
1

我需要從多臺機器運行一個腳本,但每臺機器都需要執行獨特的命令。Bash IP IF THEN ELSE Statement

我認爲bash腳本能夠做到這一點,但我對這個部門不是很瞭解。

我需要的代碼看起來類似於下面的代碼(或者它會)。我知道它遠非完美或功能性,但它確實有助於表達我期待的內容。

有人可以幫我用這個腳本嗎?

#/bin/bash 
IP= ifconfig eth0 | grep inet | grep -v inet6 | cut -c 7-17 

If [$IP -eq 192.168.32.1] 
then mkdir IPFolder-1 
more code... 
else 
if [$IP -eq 192.168.32.2] 
then mkdir IPFolder-2 
more code... 
else 
if [$IP -eq 192.168.32.5] 
then mkdir IPFolder-5 
more code... 
+0

我不知道你的問題是什麼。執行步驟是否完全不同於每個盒子?它們是否具有不同的路徑,名稱等相同的命令?您是否遇到了您開始編寫的腳本的一些特定問題? – nsfyn55

+1

「幫助」如何?你想讓我們做什麼?你的問題是什麼?我們應該如何從腳本中推斷出您的意圖,而您自己承認這些腳本並不能準確表示它們? –

+1

這可能是一種更簡單的方法來獲取IP:'ifconfig eth0 | grep -oP'(?<= inet addr:)[0-9。] +'' –

回答

4

使用雙括號,空間是很重要的:

IP=$(ifconfig eth0 | grep inet | grep -v inet6 | cut -c 21-34) 
if [[ $IP = 192.168.32.1 ]]; then 
    mkdir IPFolder-1 
elif [[ $IP = 192.168.32.2 ]]; then 
    mkdir IPFolder-2 
fi 

注:在Ubuntu 11.10,我只好用切割-c 21-34,必要時調整。

+0

謝謝薩姆!這正是我正在尋找的。 – bikerben

+0

獲取地址的更簡單(更可靠)的方法是安裝'ifdata'並使用'ifdata -pa eth0' – Daenyth

0

要小心,ifconfig是本地化的,也許這就是爲什麼山姆必須削減21-34而不是7-17。

使用LANG= ifconfig無論在哪裏都有英文。

看來ifconfig have other quirks知道了。

(這應該是一個更比一個答案評論,但我不能評論。)