Мне нужно выполнить следующий сценарий оболочки. Я пытаюсь извлечь HOSTNAME после успешного выполнения через Ansible Playbook Run.
У меня есть текстовый файл, который содержит команду запуска Ansible-Playbook, которую нужно выполнить, и записать вывод в файл журнала: result.log
Вот как выглядит файл "result.log"
PLAY RECAP *********************************************************************
TESTLINUX01 : ok=6 changed=1 unreachable=0 failed=0
Если не удалось равно «0», «Недостижимо» равно «0» и «Изменено» больше 0, затем выведите только HOSTNAME. В этом случае TESTLINUX01
Спасибо за вашу помощь.
Можно использовать что-то как это:
#!/bin/bash
file="result.log"
changed=`grep -Po "changed=\K\d+" $file`
unreachable=`grep -Po "unreachable=\K\d+" $file`
failed=`grep -Po "failed=\K\d+" $file`
if [ $changed -ge 1 -a $unreachable -eq 0 -a $failed -eq 0 ]
then
cut -s -f1 -d: $file | tr -s ' '
fi
<час> Первый мы извлекаем все необходимые значения затем, мы сравниваем их с Вашими желаемыми, если они, где соответствие мы распечатываем имя хоста.
grep -Po "changed=\K\d+
возвраты число перед "измененным" $changed -ge 1
, если изменено больше, что равный "1" -a
и $unreachable -eq 0
недостижимый было равно "0" -a
, и $failed -eq 0
отказавший было равно "0", Затем: cut -s -f1 -d: $file | tr -s ' '
печать имя хоста Спасибо всем за то, что ответили и предоставили решение. Выполнение до конца кодом работает на меня:
cat $file
$file >> $LOGFILE
SUCCESS=`grep "unreachable=0 failed=0" $LOGFILE | awk '{printf "%s ", $1;}'`
echo "Success: $SUCCESS"
FAILURE=`grep -E "unreachable=0 failed=[1-9]" $LOGFILE | awk '{printf "%s ", $1;}'`
echo "Failure: $FAILURE"
Unreachable=`grep -E "unreachable=1 failed=0" $LOGFILE | awk '{printf "%s ", $1;}'`
echo "Unreachable: $Unreachable"