if then else

Я пытаюсь написать сценарий, который проверяет определенные данные в существующих файлах. пример:

#!/bin/bash set -x if [ 'grep PASS_WARN_AGE /etc/login.defs' == 'PASS_WARN_AGE 7' ]; then echo "RHEL-06-000054 not a finding" elif [ 'grep PASS_WARN_AGE /etc/login.defs' == 'PASS_WARN_AGE 0' ]; then sed -ie 's/PASS_WARN_AGE\s\s\s\s0/PASS_WARN_AGE 7/g' /etc/login.defs else echo "Needs further review" fi 

Этот скрипт игнорировал строки if и elif и только эхо-строку «Требует дальнейшего пересмотра». По сути, я хочу, чтобы этот скрипт сказал мне, если текущее значение установлено равным 7. Если значение равно 0, а не 7, то он выполняет команду sed, изменяя значение в файле /etc/login.defs. Если представлен какой-то неизвестный результат, он сообщает пользователю, что дальнейший обзор необходим. Вся помощь приветствуется.

  • Спросить имя хоста в сценарии оболочки?
  • Захват содержимого экрана для анализа ошибок
  • Скрипт для загрузки ЦП отдельных ядер
  • Как перемещать и воссоздавать папку одновременно?
  • Извлечь файлы с определенным расширением файла и сохранить структуру каталогов?
  • Я использую bash после этого испытания?
  • Переменная в Bash, содержащая кавычки и пробелы
  • Как отправить вывод cmd в tmp-файл, одновременно просматривая файл tmp в vim
  • 3 Solutions collect form web for “if then else”

    Я понял.

      #!/bin/bash set -x grep -q 'PASS_WARN_AGE 7' /etc/login.defs if [ ${?} -eq 0 ]; then echo "RHEL-06-000054 not a finding" grep -q 'PASS_WARN_AGE 0' /etc/login.defs elif [ ${?} -eq 0 ]; then sed -ie 's/PASS_WARN_AGE\s\s\s\s0/PASS_WARN_AGE 7/g' /etc/login.defs; echo "RHEL-06-000054 patched" else echo "needs further review" fi 

    Вы можете просто безоговорочно запустить sed в файле, если хотите:

     sed -i .bak -Ee 's/^PASS_WARN_AGE\s+0/PASS_WARN_AGE 7/' /etc/login.defs 

    Я бы с осторожностью использовал шаблон, подобный \s\s\s\s так как количество пробелов может меняться. Я не думаю, что стандарт является стандартным, но я полагаю, что если контекст RHEL, у вас будет GNU sed.

    вам нужно использовать backticks (`), чтобы команды работали, в коде, который вы указываете в своем вопросе, вы сравниваете две статические строки. `! = '

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