【问题标题】:Evaluate and assign variables inside ssh session in shell script在 shell 脚本中评估和分配 ssh 会话中的变量
【发布时间】:2018-03-20 07:26:30
【问题描述】:

我正在尝试在 ssh 会话中增加 indx 和 eindx 值。但没有任何命令起作用..

#!/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 centos@$i << EOF
for var in {1..4}
do
indx=`expr $eindx + 1` // not working
eindx=$((indx+eindx))  // not working
done
EOF
done
exit

也尝试过使用 let

let "indx=indx+1" //不工作

请提出处理变量的最佳方法。

【问题讨论】:

  • 您是否尝试过引用heredoc sigil(例如'EOF')来防止本地主机上的变量扩展?
  • @DavidC.Rankin..Tried 'EOF' 出错。
  • 引用印记可以防止 pathnamevariable 扩展。这是防止两者的标准方法。看来您遇到的问题是您希望在本地扩展变量,然后结果通过 ssh 传递到$i 的主机。虽然不是原因,但使用$((...)) 算术是正确的,将expr a + b 留在过去。您是否在所有进行数学运算的情况下都尝试过 $((...)) 算术?
  • @DavidC.Rankin 使用了 $((..)) 表达式,但是它不起作用。如果我使用 EOF,它会抛出一个错误,它无法解析我的 $var m 试图在另一个命令中使用

标签: shell unix ssh


【解决方案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 centos@$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

【讨论】:

  • 没有运气。如果我使用 \EOF,内部 for 循环变量 'var' 没有得到解决。如果我删除并尝试运行,我可以在调试中看到,expr $eindx + 1 得到已执行但未分配给 indx 变量。
  • 我的坏...
【解决方案2】:

我运行了相同的脚本。它显示了正确的值。

【讨论】:

    猜你喜欢
    • 2011-11-29
    • 2018-12-29
    • 2021-10-10
    • 1970-01-01
    • 2014-04-20
    • 2022-08-08
    • 1970-01-01
    • 1970-01-01
    • 2018-07-28
    相关资源
    最近更新 更多