2017-06-12 45 views
-1

我編寫了一個shell腳本,它在一個虛擬機上運行時收集用戶從不同vms輸入的各種其他服務的狀態。代碼如下如下無法在使用ssh時在另一個變量中執行變量引用

#!/bin/sh 
if [ $# -eq 0 ] 
then 
echo -e "\n Please pass the service names in the command line argument\n" 
exit 1 
fi 

cl=$# 
HOSTS="IP address of hosts" 

for HOSTNAME in ${HOSTS} 
do 
     echo -e "Service status on $HOSTNAME" 

     ssh [email protected]$HOSTNAME bash -c ' 
        for ((i=1;i<='$cl';i++)) 
        do 
        echo $i 
        eval x='\$$i' 

        echo $x 
        service $i status 
        done          ' 
done 

在使用eval x='\$$i'「x」的值應該是由用戶傳遞的參數,但是當我ssh它的價值是沒有得到解釋,而不是x的值是$。

根據i的值,x的值應該是$ 1,$ 2等......。

例如,如果我給./test.sh SSSD,則X值應爲SSSD

回答

0

我已經報價若干變量,應該是報價。

請檢查下面的代碼

for HOSTNAME in ${HOSTS} 
do 
     echo -e "Service status on $HOSTNAME" 

     ssh [email protected]"$HOSTNAME" bash -c ' 
        for ((i=1;i<='"$cl"';i++)) 
        do 
        echo $i 
        eval x='$$i' 

        echo $x 
        service $i status 
        done          ' 
done 
0

這是,如果你只是不嘗試重用的i值作爲位置參數簡單得多。

ssh [email protected]"$HOSTNAME" bash -c ' 
    i=0 
    for x in "[email protected]"; do 
    echo "$i" 
    echo "$x" 
    service "$i" status 
    i=$((i+1)) 
    done 
' _ "[email protected]" 

請注意,你需要傳遞的test.sh參數ssh以及以確保他們一起在遠端的bash腳本傳遞。 _是一個虛擬參數,用於在腳本中設置$0的(未使用的)值。

或者,使用間接參數膨脹,而不是eval

ssh [email protected]$HOSTNAME bash -c ' 
    for ((i=1;i<='$cl';i++)) 
    do 
    echo "$i" 
    x=${!i} 
    echo "$x" 
    service "$i" status 
    done 
' _ "[email protected]"   
相關問題