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. Если представлен какой-то неизвестный результат, он сообщает пользователю, что дальнейший обзор необходим. Вся помощь приветствуется.

  • «History» перестает работать при запуске внутри сценария bash
  • Как установка бита Setuid влияет на сценарии оболочки, которые запускаются при загрузке системы, до того, как произошел какой-либо логин?
  • Разница между двумя типами арифметики оболочки
  • Различное поведение в сценарии оболочки в оболочке?
  • скрипт bash, не выполняемый cron
  • выход функции bash в трубу
  • Какова цель иметь две переменные ($ @, $ *) для передачи аргументов команды в скрипт?
  • Как выполнить замену на месте, которая создает только резервные копии файлов, которые были изменены?
  • 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 - лучшая ОС в мире.