Это часть моего кода, над которым я работаю, чтобы найти слово на удаленном сервере, подключающемся через ssh к этому серверу.
filename=test.repo
word=fail
exists=$(grep -c $word $filename)
file_server=$1
for i in $(cat $file_server)
do echo ''; echo $1 ;
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]]; '
любое предложение
Добавьте пробелы после [[ и перед ]].
Не используйте цикл for для перебора файла. См. mywiki.wooledge.org/BashFAQ/001.





Эту строку следует вырезать из начала скрипта: существует=$(grep -c $word $filename)
И замените вызов grep внутри цикла.
Что я делаю, с некоторой помощью коллеги исправляю это, избегая использования переменной в сеансе ssh.
file_server=$1
filename=testfile.repo
keyword=testword
if [[ -z $1 ]]
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 $1 ;
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
$existsустанавливается в скрипте "снаружи"ssh. Другой сервер (представленный здесь$i) не знает о$exists, который вы установили на исходном сервере. Переменные и их значения не «отправляются» и не копируются на удаленный сервер, к которому вы подключаетесь черезssh.