Como usar o grep quando o arquivo não contém a string

12

No meu script, estou tentando imprimir uma linha se uma determinada string não existir em um arquivo.

if grep -q "$user2" /etc/passwd; then
    echo "User does exist!!"

É assim que eu escrevi se eu quisesse que a string existisse no arquivo, mas como eu posso mudar isso para fazer com que seja impresso "o usuário não existe" se o usuário não for encontrado no arquivo / etc / passwd? / p>     

por Chirag Vijay 16.08.2015 / 14:43

2 respostas

28

grep retornará sucesso se encontrar pelo menos uma instância do padrão e falha, se não encontrar. Assim, você pode adicionar uma cláusula else se desejar que ambas as impressões "não" e "não" sejam impressas, ou você poderia apenas negar a condição if para obter apenas falhas. Um exemplo de cada um:

if grep -q "$user2" /etc/passwd; then
    echo "User does exist!!"
else
    echo "User does not exist!!"
fi

if ! grep -q "$user2" /etc/passwd; then
    echo "User does not exist!!"
fi
    
por 16.08.2015 / 14:52
1

Uma alternativa é procurar o status de saída de grep . Por exemplo:

grep -q "$user2" /etc/passwd
if [[ $? != 0 ]]; then
    echo "User does not exist!!"

Se grep não encontrar uma correspondência, sairá 1 , por isso $? será 1 . grep sempre retornará 0 se for bem-sucedido. Por isso, é mais seguro usar $? != 0 than $? == 1 .

    
por 09.04.2018 / 18:49