评估和shell脚本分配SSH会话内变量
问题描述:
我想增加一个SSH session.but没有命令正在内部INDX和eindx值..评估和shell脚本分配SSH会话内变量
#!/bin/bash
hosts=(#10.xx.xx.xx)
PdidPrefix1=$1
Runtime=$2
indx=$3
eindx=`expr $indx + $4`
logfilename=$5
for i in "${hosts[@]}"
do
echo $i
ssh [email protected]$i << EOF
for var in {1..4}
do
indx=`expr $eindx + 1` // not working
eindx=$((indx+eindx)) // not working
done
EOF
done
exit
使用让还
尝试让“indx = indx + 1”//不工作
请提出处理变量的最佳方法。
答
#!/bin/bash
hosts=(xx.10.20.30)
PdidPrefix1=$1
Runtime=$2
indx=$3
eindx=`expr $indx + $4`
logfilename=$5
for i in "${hosts[@]}"
do
echo $i
ssh [email protected]$i "bash -s -- '$indx' '$eindx'" <<\EOF
echo "In remote shell with parameters $1 $2..."
indx=$1
eindx=$2
for ((var=1; var<=4; var++))
do
indx=`expr $eindx + 1`
eindx=$((indx+eindx))
echo "var=" $var " indx=" $indx " eindx=" $eindx
done
EOF
done
exit
+0
没有Luck.If我使用\ EOF,内循环变量'var'没有得到解决。如果我删除并尝试运行,我可以看到在调试中,expr $ eindx + 1正在执行,但没有得到分配给indx变量。 – SuryaVeepuri
+0
我的坏..bro ..它的工作...我复制了代码段的一部分,并试图..谢谢... – SuryaVeepuri
答
我已经运行了相同的脚本。它显示出适当的价值。
您是否试过引用heredoc sigil(例如''EOF'')来防止本地主机上的变量扩展? –
@ DavidC.Rankin..Tried'EOF'出错。 – SuryaVeepuri
引用sigil可防止* pathname *和* variable *扩展。这是防止两者的标准方式。看来你遇到的问题是你想在本地展开变量,然后结果通过ssh传递给'$ i'处的主机。虽然不是原因,但使用'$((...))'算术是正确的,在过去留下'expr a + b'。你是否在所有你正在进行数学计算的情况下都用'$((...))'算术进行尝试? –