变量是错误的命令

时间:2014-05-12 11:34:31

标签: bash shell

我正在编写一个脚本,它从ssh入站连接中获取3个变量。 援助 一个名字 还有一个交换机端口号

在处理案件之前,一切都很好。而且我得到一个奇怪的错误输出。

./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

我已经没有想法了

3 个答案:

答案 0 :(得分:0)

<string>_$<var>=<value> is wrong syntax to create dynamic variable.

使用declare创建动态变量。 e.g。

declare "ID_$LANPORT=$ID"

我认为这会有所帮助,因为提到的错误仅适用于此变量赋值。

答案 1 :(得分:0)

仅当=左侧的部分是有效变量名称时,才会识别变量赋值。由于变量名中不允许$,因此将令牌视为命令。您需要评估分配:

 eval "installationID$LANPORT=$ID"

答案 2 :(得分:0)

这里不需要复杂的变量名;只需使用installationID="$ID"等。

Use More Quotes,否则[语句将失败:

[ -z "$1" ]

不是错误,但您可以合并case语句:

case 1|2|3|4)