Bash 无法进行变量引用“;内部”;使用ssh时的另一个变量
我编写了一个shell脚本,它在一个vm上运行时,收集用户从不同vm输入的各种其他服务的状态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
#!/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