Мне нужно выполнить следующий скрипт оболочки. Я пытаюсь извлечь HOSTNAME после того, как он успешно запустится через Ansible Playbook Run.
У меня есть текстовый файл, содержащий команду запуска Ansible-Playbook, которую нужно выполнить и записать вывод в файл журнала: result.log
Вот как выглядит файл "result.log"
PLAY RECAP *********************************************************************
TESTLINUX01 : ok=6 changed=1 unreachable=0 failed=0
Если failed равно "0", Unreachable равно "0" и Changed больше 0, то вывести только HOSTNAME. В этом случае TESTLINUX01
Спасибо за помощь.
решение1
Вы можете использовать что-то вроде этого:
#!/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
failed был равен «0», тогда:
cut -s -f1 -d: $file | tr -s ' '
печатает имя хоста
решение2
Спасибо всем за ответ и решение. Следующий код работает для меня:
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"