Problema com a instrução if no Unix

0

Estou obtendo a saída do primeiro script if , mas não consigo obter a saída da segunda parte da instrução if no script abaixo:

#!/bin/ksh

err_abc='grep -r "XYZ" /home |wc -l'
err_AB='grep -r "XYZ" /home' > /dev/null 2>&1
err_ERR='grep -r "ERROR" /home |wc -l'
err_eRR='grep -r "ERROR" /home' > /dev/null 2>&1

if [ $err_abc -gt 0 ]
then
    echo "$err_AB"
else
    echo "No errors found"

    if [ $err_ERR -gt 0 ]
    then
        echo "$err_eRR"
    else
        echo " \n No err files found"
        exit 0
    fi
fi
    
por User123 13.10.2017 / 17:55

2 respostas

3

Tem certeza de que o código está fazendo o que você acha que está fazendo? Vamos recuar para que possamos ver mais facilmente a lógica:

if [ $err_abc -gt 0 ]; then
    echo "$err_AB"
else
    echo "No errors found"
    if [ $err_ERR -gt 0 ]; then
        echo "$err_eRR"
    else
        echo " \n No err files found"
        exit 0
    fi
fi

Seu segundo bloco if está sendo executado apenas se e somente se o teste do primeiro bloco for falso. Se você quiser que ambos os testes sejam executados em todos os casos, isso precisa ser reescrito:

if [ $err_abc -gt 0 ]; then
    echo "$err_AB"
else
    echo "No errors found"
fi
if [ $err_ERR -gt 0 ]; then
    echo "$err_eRR"
else
    echo " \n No err files found"
    exit 0
fi

Além disso, o exit 0 que você tem na cláusula if da sua instrução else final só é executado se houver apenas se o segundo teste for falso. Se esta não for sua intenção, essa declaração deve ser movida apropriadamente.

    
por 13.10.2017 / 18:06
0

Você está fazendo muito trabalho extra para definir as variáveis: você está recorrendo a 4 vezes separadas recursivamente. Você só precisa fazer isso uma vez:

all_errs=$(grep -r -E "XYZ|ERROR" /home 2>/dev/null)

Em seguida, as outras informações podem ser recuperadas dessa variável

err_AB=$(grep "XYZ" <<< "$all_errs)
err_abc=$(wc -l <<< "$err_AB")

err_eRR=$(grep "ERROR" <<< "$all_errs")
err_ERR=$(wc -l <<<"$err_eRR")
    
por 13.10.2017 / 22:01

Tags