我正在编写一个脚本,它从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
我已经没有想法了
答案 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)