如何在远程服务器内部设置变量值

时间:2019-07-12 09:25:34

标签: shell unix

在远程服务器内部我有一个条件语句。如果该条件通过 状态值应设置为成功。

但是在这里,我总是在打印状态变量时得到失败响应

status ='成功';

status='Success';

# !/bin/bash

declare -a server_PP=('XXXXX' 'YYYYYYY' );
declare -A results_map;


function process(){
serverList=$1[@];
servers=("${!serverList}");
status='Failure';
for  serverName in "${servers[@]}"
do
    ssh  $serverName  <<  EOF
          if [ -f /app/Release/abc.war ]; then
            echo "available - success"
            status='Success';
          fi
echo "***********status-inside******$status"
        exit
EOF
echo "***********status-outside******$status"
results_map+=([$serverName]=$status);
done

}


process 'server_PP'

for i in "${!results_map[@]}"
do
  echo "key :" $i
  echo "value:" ${results_map[$i]}
done

当满足该条件时,状态变量应设置为成功。

1 个答案:

答案 0 :(得分:1)

如pcarter的评论所述,这两个系统上的变量彼此独立,并且不会通过ssh进行传递。代替设置变量(或按照注释中的建议打印和读取值,这是一种可行的解决方案),您可以使用退出代码,该退出代码由ssh自动传递。

以下脚本接近原始脚本。有关进一步的改进,请参见下文。

# !/bin/bash

declare -a server_PP=('XXXXX' 'YYYYYYY' );
declare -A results_map;


function process(){
serverList=$1[@];
servers=("${!serverList}");
status='Failure';
for  serverName in "${servers[@]}"
do
    if ssh  $serverName  <<  EOF
        if [ -f /app/Release/abc.war ]; then
            echo "available - success"
            exit 0;
        fi
        echo "error"
        exit 1
EOF
    then
        status='Success'
    else
        status='Failure'
    fi
echo "***********status-outside******$status"
results_map+=([$serverName]=$status);
done
}


process 'server_PP'

for i in "${!results_map[@]}"
do
  echo "key :" $i
  echo "value:" ${results_map[$i]}
done

由于不再需要变量分配,因此甚至可以在远程命令中省略if ...exit

    if ssh  $serverName  <<  EOF
        [ -f /app/Release/abc.war ]
EOF
    then
...

您将Heredoc用作

的方法
ssh hostname <<EOF 
# commands ...
EOF

的缺点是您在远程系统上运行交互式外壳程序,该外壳程序在执行命令之前可能会打印一些系统信息或欢迎消息。通过将命令或脚本指定为ssh的命令行参数,可以进一步简化脚本(并删除欢迎消息)。

    if ssh  $serverName  [ -f /app/Release/abc.war ]
    then
...

如果命令序列较长,则可以在远程系统上创建脚本并以与ssh hostname scriptname相同的方式运行此脚本。您还可以使用sshscp在远程系统上创建脚本。