Bash 无法进行变量引用“;内部”;使用ssh时的另一个变量

Bash 无法进行变量引用“;内部”;使用ssh时的另一个变量,bash,shell,virtual-machine,Bash,Shell,Virtual Machine,我编写了一个shell脚本,它在一个vm上运行时,收集用户从不同vm输入的各种其他服务的状态 #!/bin/sh if [ $# -eq 0 ] then echo -e "\n Please pass the service names in the command line argument\n" exit 1 fi cl=$# HOSTS="IP address of hosts" for HOSTNAME in ${HOSTS} do echo -e "Servic

我编写了一个shell脚本,它在一个vm上运行时,收集用户从不同vm输入的各种其他服务的状态

#!/bin/sh
if [ $# -eq 0 ]
then
echo -e "\n Please pass the service names in the command line argument\n"
exit 1
fi

cl=$#
HOSTS="IP address of hosts"

for HOSTNAME in ${HOSTS}
do
         echo -e "Service status on $HOSTNAME"

         ssh root@$HOSTNAME bash -c '
                  for ((i=1;i<='$cl';i++))
                  do
                     echo $i
                     eval x='\$$i'

                     echo $x
                     service $i  status
                     done                                       '
done
#/垃圾箱/垃圾箱
如果[$#-eq 0]
然后
echo-e“\n请在命令行参数中传递服务名称\n”
出口1
fi
氯离子=$#
HOSTS=“主机的IP地址”
用于${HOSTS}中的主机名
做
echo-e“$HOSTNAME上的服务状态”
ssh root@$HOSTNAME bash-c'

对于((i=1;i我引用了几个应该引用的变量

请检查下面的代码

for HOSTNAME in ${HOSTS}
do
         echo -e "Service status on $HOSTNAME"

         ssh root@"$HOSTNAME" bash -c '
                  for ((i=1;i<='"$cl"';i++))
                  do
                     echo $i
                     eval x='$$i'

                     echo $x
                     service $i  status
                     done                                       '
done
${HOSTS}中主机名的

做
echo-e“$HOSTNAME上的服务状态”
ssh root@“$HOSTNAME”bash-c”

对于((i=1;i),如果您不尝试将
i
的值作为位置参数重用,那么这会简单得多

ssh root@"$HOSTNAME" bash -c '
  i=0
  for x in "$@"; do
    echo "$i"
    echo "$x"
    service "$i" status
    i=$((i+1))
  done
' _ "$@"
请注意,您需要将
test.sh
的参数传递到
ssh
,并确保它们被传递到远程端的
bash
脚本。
\uu
是一个伪参数,用于设置脚本中
$0
的(未使用)值

或者,使用间接参数展开而不是
eval

ssh root@$HOSTNAME bash -c '
  for ((i=1;i<='$cl';i++))
  do
     echo "$i"
     x=${!i}
     echo "$x"
     service "$i" status
  done
' _ "$@"          
ssh root@$HOSTNAME bash-c'
对于((i=1;i