синтаксис оператора case для проверки наличия ввода в нескольких путях к файлам

По части 1: Да, оба шаблона будут соответствовать 1, 2 или 3.

Часть ответа на ваш первый вопрос - это ваш второй вопрос. Как ни странно.

Круглые скобки используются для включения обратных ссылок и уточнения приоритета / группировки операторов.

Квадратные скобки заключают символьный класс . Они используются для сопоставления одного экземпляра набора символов внутри.

Например, \ (hello \) будет соответствовать слову «hello», а также поместит его в соответствующую переменную обратной ссылки ( \ 1 , \ 2 и др.)

С другой стороны, [привет] будет соответствовать ОДНОМУ символу, одному из набора {e, h, l, o}.

Некоторые дополнительные данные (просто дополнительная информация):

Обратные ссылки основаны на последовательности открытых пар, а не закрытых. С вложенными паренами это может стать важным. Игнорирование escape-символов для удобства чтения - (this (that) (the other)) приведет к \ 1 , содержащему this that the other ; \ 2 , содержащий тот и \ 3 , содержащий другой .

Подсчет класса символов проверяет наличие дополнительных экземпляров этого класса символов. Они не должны совпадать одинаково. Например, [0-9] будет соответствовать одной цифре, а [0-9] {5} будет соответствовать любым пяти цифрам. Если вы хотите сопоставить только 5 повторяющихся цифр, например соответствует 77777 или 33333, но не 37497, используйте обратную ссылку: \ ([0-9] \) \ 1 {4}

0
30.04.2018, 20:45
2 ответа

Если вы знаете разницу между вашими хостами для разработки и рабочими хостами или если существует простое соглашение об именах (e. г. dev.example.comпротив prod.example.com), это может быть так же просто, как:

for host in $(</home/completelistlistcheck.txt); do
    case "$(ssh $host hostname)" in
        *dev*)
            env="development"
            break
            ;;
        *prod*)
            env="production"
            break
            ;;
        *)
            env="non-categorized"
            break
            ;;
    esac
    echo "$host is a $env host."
done

Если на каждом хосте есть файл, содержимое которого вам нужно проанализировать, используйте cat /path/to/fileвместо hostnameв команде, запускаемой через ssh.

0
28.01.2020, 04:24

Есть несколько проблем:

имя хоста

Если ваш логин не гарантирует, что эта переменная существует, вы должны использовать вместо нее команду hostname:

chk=$(hostname)

сш

ssh $hostпросто входит в систему и ждет ввода с терминала. Следующая команда выполняется после выхода ssh. Вы должны добавить команду к вызову ssh. Было бы слишком много передавать весь материал caseв ssh, но, насколько я понимаю, вам нужен только результатhostname:

chk="(ssh "$host" hostname)"
0
28.01.2020, 04:24

Теги

Похожие вопросы