Если условие не работает в скрипте над ssh

Ниже сценария оболочки в режиме SSH не работает.

переменная end_pos получает значение «Стоп», но когда он приходит в цикл IF, он не проверяет условие, и цикл становится неудачным.

Вывод команды:

/mysql/mysql/bin/mysqlbinlog mysql-bin.000001 |tail -10| grep -w -A1 154 | grep -w "Stop" |awk '{print \$10}' 

STOP

echo \ $ end_pos; печать STOP

  #!/bin/bash ssh -t -t username@hostname << ENDSSH cd /logs echo "8. We are in SSH mode now" >./log_master.txt end_pos=\$(/mysql/mysql/bin/mysqlbinlog mysql-bin.000001 |tail -10| grep -w -A1 154 | grep -w "Stop" |awk '{print \$10}') echo \$end_pos; if [ "\$end_pos" == "*Stop*" ]; then echo "Loop succeed" >>./log_master.txt break else echo "loop failed" >>./log_master.txt fi exit; exit; ENDSSH 

После комментария ilkKachu я ставлю кавычки в «ENDSSH» (это единственное изменение, которое я сделал) и выполнил. Он забросил ошибку. Затем я использовал второй метод размещения двойных скобок, как показано ниже.

Но когда выполняется сценарий ниже, я получаю это: if [["" = " Stop "]];

  #!/bin/bash ssh -t -t username@hostname << ENDSSH cd /logs echo "8. We are in SSH mode now" >./log_master.txt end_pos=\$(/mysql/mysql/bin/mysqlbinlog mysql-bin.000001 |tail -10| grep -w -A1 154 | grep -w "Stop" |awk '{print \$10}') echo \$end_pos; if [[ "$end_pos" == "*Stop*" ]]; then echo "Loop succeed" >>./log_master.txt break else echo "loop failed" >>./log_master.txt fi exit; ENDSSH 

2 Solutions collect form web for “Если условие не работает в скрипте над ssh”

 ssh -t -t username@hostname << ENDSSH ... echo \$end_pos; 

Если вам не нужно расширять какие-либо переменные из внешней оболочки до здесь-документа, который идет на SSH, вы можете использовать << "ENDSSH" с кавычками вокруг разделителя, чтобы иметь здесь-doc, как если бы одно- цитированная строка. Тогда вам не нужно бежать каждый знак $ внутри него.

 if [ "$end_pos" == "*Stop*" ]; then 

Если вы хотите сравнить значение с *Stop* как шаблоном , а не как литеральную строку, вам нужно использовать [[ .. ]] или более стандартный case :

 if [[ $end_pos = *Stop* ]] ; then ... # or case "$end_pos" in *Stop*) echo "stop found" ;; *) echo "stop not found" ;; esac 

Кроме того, этот break выглядит неуместным, нет петли. Баш будет жаловаться на это, но только если эта часть if-statement будет выполнена. Два exit в строке кажутся немного избыточными.

Я сделал это ниже:

 #!/bin/bash ssh -t -t username@hostname << ENDSSH cd /logs echo "8. We are in SSH mode now" >./log_master.txt end_pos=\$(/mysql/mysql/bin/mysqlbinlog mysql-bin.000001 |tail -10| grep -w -A1 154 | grep -w "Stop" |awk '{print \$10}') echo \$end_pos; if [[ "$end_pos" =~ Stop ]]; then echo "Loop succeed" >>./log_master.txt else echo "loop failed" >>./log_master.txt fi exit; ENDSSH 
  • Что означает '-size +0' в команде 'test'
  • Использование -n и -z в тестировании встроено - Bash
  • Как я могу использовать команды bash, если тесты и найти команды вместе?
  • Поймать неожиданный ввод одиночного символа в bash
  • Bash - ожидаемое целочисленное выражение
  • bash: -eq vs. == и `bc` тип вывода
  • Модернизирован, чтобы проверить ветвь по ошибке в debian ... как я могу вернуться к стабильной?
  • Как узнать, существует ли каталог?
  • Как сравнить версию программы в сценарии оболочки?
  • Interesting Posts

    Ipadm: операция не выполнена

    Как сопоставить несколько строк, начинающихся с TAB, и строку до 1-го в группе?

    Ошибка установки установки vboxdrv при установке VirtualBox на CentOS 7

    Включить массивный одновременный SSH на один сервер

    Как синхронизировать внутренние часы Debian (с серверами NTP)?

    Является ли стандартным поведением для компакт-диска автоматически выбирать, когда задано неполное имя каталога?

    Быстрый способ добавления / добавления в большой файл

    Почему find не принимает '-exec cp {} dir +'?

    Сокращение команды сборки

    Как кодировать огромные файлы FLAC в MP3 и другие файлы, такие как AAC?

    Строить RPM, чтобы вести себя по-другому при установке и обновлении?

    Удаление текстовых объектов Word в VIM

    Здание zsh без администратора: нет библиотеки обработки терминала

    Переключение между вложенными сеансами tmux

    новый кошелек kde с использованием GPG-бэкэнд: «Ошибка при попытке дешифрования кошелька с использованием GPG»

    Linux и Unix - лучшая ОС в мире.