2014-05-12 65 views
0

我正在寫一段腳本,從ssh入站連接中獲取3個變量。 A ID A名稱 和一個交換機端口號變量是錯誤的命令

所有的都是fin,直到案件得到處理。對我來說,得到一個奇怪的錯誤輸出。

./installations.sh: line 11: ID_1=c8:2a:14:25:b7:f8: command not found 
./installations.sh: line 12: Name_1=Jonass-MBP: command not found 
./installations.sh: line 14: installationID_2=00:1f:d0:db:b7:48: command not found 
./installations.sh: line 15: installationMame_2=JonasKirkPeders: command not found 
No attached system on port 
No attached system on port 

必須將PC連接到測試目的,我可以看到正在從遠程腳本發送正確的數據。 但是,爲什麼在這種情況下,變量錯誤地作爲命令處理,而不僅僅是變量設置?

echo $1 $2 $3 >> test.log 
ID=$1 
NAME=$2 
LANPORT=$3 

    if [ -z $1 ] || [ -z $2 ]; then 
    echo "No attached system on port $LANPORT" 
    else 
    case $LANPORT in 
    1) installationID$LANPORT=$ID 
     installationName_${LANPORT}=$NAME 
     ;; 
    2) installationID_$LANPORT=$ID 
     installationName_${LANPORT}=$NAME 
     ;; 
    3) installationID_$LANPORT=$ID 
     installationName_${LANPORT}=$NAME 
     ;; 
    4) installationID_$LANPORT=$ID 
     installationName_${LANPORT}=$NAME 
     ;; 
    *) echo "ERROR - NO such port!! ${LANPORT}" >> test.log 
     ;; 
esac 

echo "LAN $LANPORT - $installationID_$LANPORT" >> test.log 
fi 

我已經跑出去的想法

+0

'名稱_ $ {LANPORT}'是錯誤的。同樣,還有一些分配是錯誤的。 – devnull

+0

來自C:D的l值錯誤不完全是,但bash你可以做什麼,你可以在一個文件中回顯這些文件,並從那個文件中獲取它:)否則你不能擺脫那個「需要左值」。 – PradyJord

回答

0

您不需要複雜的變量名稱;只需使用installationID="$ID"等。

Use More Quotes,否則[語句將失敗:

[ -z "$1" ] 

不是錯誤,但你可以合併case聲明:

case 1|2|3|4) 
0
<string>_$<var>=<value> is wrong syntax to create dynamic variable. 

來創建動態變量使用declare。例如

declare "ID_$LANPORT=$ID" 

我認爲這將有所幫助,因爲所提到的錯誤只與這個變量賦值有關。

+0

偉大的我會嘗試一下 – Sifungurux

0

僅當=左邊的部分是有效的變量名稱時纔會識別變量賦值。由於$在變量名稱中不允許,因此令牌被視爲命令。您需要評估分配:

eval "installationID$LANPORT=$ID" 
+0

好吧,不需要做一個評估,但我看到你的變量聲明並刪除了短劃線和下劃線。 Yoola,它似乎工作。 – Sifungurux