if then else problemas de instrução

1

Estou tentando escrever um script que verifica determinados dados em arquivos existentes. exemplo:

#!/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

Este script ignorou as strings if e elif e apenas ecoa a string "Precisa de revisão adicional". Essencialmente, eu quero que este script me diga se o valor atual é definido como 7. Se o valor for 0 e não 7, ele executará um comando sed, alterando o valor dentro do arquivo /etc/login.defs. Se alguma saída desconhecida for apresentada, ela informará ao usuário que uma revisão adicional é necessária. Toda ajuda é apreciada.

    
por GreNIX 16.03.2017 / 18:34

3 respostas

2

Eu percebi isso.

    #!/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
    
por 16.03.2017 / 19:03
1

Você pode executar incondicionalmente sed no arquivo, se desejar:

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

Eu ficaria preocupado em usar um padrão como \s\s\s\s , já que a quantidade de espaço em branco pode variar. Eu não acho que \s é padrão, mas suponho que se o contexto for RHEL, você terá o GNU sed mesmo assim.

    
por 16.03.2017 / 19:23
0

você precisa usar backticks (') para permitir que os comandos funcionem, no código que você fornece em sua pergunta você compara duas strings estáticas. '! ='

    
por 16.03.2017 / 19:23