2017-04-14 65 views
0

我運行一個for循環,在另一個文件中的變量調用:裏面一個使用變量的另一個猛砸

export HOSTNAME_0=<hostname> 
export HOSTNAME_1=<hostname> 
export HOSTNAME_2=<hostname> 

我想:

hostnames.txt 

在該文件中這個樣子的變量像這樣在循環內使用它們:

. hostnames.txt 
for f in {0..10}; do 
ssh $HOSTNAME_'{$f}' 
if [$? !=0]; then 
    echo "Unable to SSH to server $HOSTNAME_'{$f}'" 
    exit 1 
fi 

但是它沒有正確讀取值,而且我不確定我是什麼 失蹤。會愛任何幫助。

+0

檢查你在[]中的空格,或者可以使用(()) – cdarke

回答

3

你需要建立你的變量名,並與${!var}訪問它,比如:

. hostnames.txt 
for f in {0..10}; do 
    hostnamevar=HOSTNAME_${f} 
    ssh ${!hostnamevar} 
    if [ $? -ne 0 ]; then 
    echo "Unable to SSH to server ${!hostnamevar}" 
    exit 1 
    fi 
done 
+0

在'if'測試表達式中需要空格:'if [$? != 0]; then'。 –

+0

@GordonDavisson我只是在複製他與IMO無關的代碼。無論如何,我編輯了答案,以便修復他的其他代碼。 – vdavid

+0

謝謝你的工作。我還有一個額外的問題,我在登錄後想要在遠程服務器上執行額外的命令,現在它們都沒有運行。任何想法如何讓他們運行? – user2019182

1

當你沒有開始,「主機名」其他增值經銷商,您可以使用

. hostnames.txt 
    for host in $(set | sed -n '/^HOSTNAME*=/ s/[^=]*=//p') ; do 
     ssh "${host}" 
     # or, for calling 2 commands: 
     # ssh "${host}" "echo 1 2 3; echo 4" 
     if [ $? -ne 0 ]; then 
      echo "Unable to SSH to server ${host}" 
      exit 1 
     fi 
    done