预期使用 Do 和 ssh 连接的条件二元运算符

conditional binary operator expected with Do and ssh connection

这是我的代码的一部分,我正在努力在通过 ssh 连接到该服务器的远程服务器中查找单词

filename=test.repo
word=fail
exists=$(grep -c $word $filename)
file_server=

for i in $(cat $file_server)
    do echo ''; echo  ;
    ssh $i "printf '\e[33m'; hostname; printf '\e[0m\n]' ;
    cd /etc/yum.repos.d/;
    grep -c $word $filename;
    echo $exists;
    if [[ $exists -gt 0 ]];
        then printf 'Keyword found, cleanup starts \n';
            else printf ''$word', was not found, nothing to do here with '$filename'. \n';
fi"

done

这只适用于 Do 命令,但如果我添加 if [[$exist -gt 0]]; , 这有一个错误

bash: -c: 第 4 行:需要条件二元运算符 bash: -c: 第 4 行:;' bash: -c: line 4: 附近的语法错误 if [[ -gt 0]]; '

任何建议

这一行应该从脚本的开头删掉: 存在=$(grep -c $word $文件名)

并在循环内替换对 grep 的调用。

我做了什么,在同事的帮助下解决了这个问题,避免在 ssh 会话中使用变量。

file_server=
filename=testfile.repo
keyword=testword


if [[ -z  ]]
then
        printf "\t\e[0;31m==================== ERROR ======================\n"
        printf "\tServer list not found\e[0;0m\n"
        exit 1
fi

for i in $(cat $file_server)
    do echo ''; echo  ;
    ssh $i "printf '\e[33m'; hostname; printf '\e[0m\n';
        cd /etc/yum.repos.d/;
        if grep -q $keyword $filename;
    then
        printf '\e[33m$keyword found, cleanup starts\e[0m\n';
        sed -i.BAK '/^failovermethod=/d' $filename
        grep failovermethod $filename;
        printf '\e[33mBackup file created with the $keyword with this name $filename.BAK\e[0m\n';
        grep 'failovermethod' pgdg-redhat-all-test.repo.BAK;
    else
        printf '\e[33m${keyword^^}\e[32m, was not found, nothing to do here. \e[0m\n';

    fi;";

done