2017-05-04 65 views
0

我需要編寫一個korn腳本,根據運行腳本的主機,將設置一個部署目錄(也就是說5個主機將軟件部署到目錄1,其他五臺主機部署到目錄二)。Shell/Korn腳本 - 根據列表中的主機名設置變量

我怎麼能做到這一點 - 我想避免的,如果條件爲每個主機像下面

IF [hostname = host1] then $INSTALL_DIR=Dir1 
ELSE IF [hostname = host2] then $INSTALL_DIR=Dir1 

寧可有說Directory1Hosts和Directory2Hosts一個列表,其中包含所有有效每個目錄的主機,然後我會檢查腳本運行的主機是否在我的Directory1Hosts或Directory2Hosts中(因此只有兩個IF條件而不是10)。

感謝您的幫助 - 一直在努力尋找如何有效地做一個包含條款。

回答

1

使用case聲明:

case $hostname in 
    host1) INSTALL_DIR=DIR1 ;; 
    host2) INSTALL_DIR=DIR2 ;; 
esac 

或當你想擁有的配置和代碼分開使用關聯數組

install_dirs=([host1]=DIR1 [host2]=DIR2) 

... 

INSTALL_DIR=${install_dirs[$hostname]} 
+1

'case'允許模式,如'主機[0-5])INST ...' – ULick

0

,你可以做一個config目錄:一個文件與主機每個安裝目錄。

# cat installdirs/Dir1 
host1 
host2 

隨着這些文件的代碼可以

INSTALL_DIR=$(grep -Flx "${hostname}" installdirs/* | cut -d"/" -f2)