Verifique se a string específica está presente em uma saída do shell script usando o comando shell

0

Eu tenho um script de shell (test1.sh) que retorna a seguinte saída

 Employee ID          emp Type  return type  Admin User
   us321000034006755    ITdept      access    Itadminuser

Eu queria verificar se a saída contém a string ITdept para que eu usei o seguinte:

if ./test1.sh | grep -q 'ITdept'; 
then
    echo "found"
else
    echo "Not found"
fi

Junto com isso, eu queria checar as strings Employee ID us321000034006755 também, já que ele não retorna nenhum resultado frutífero com o comando que estou usando, não sei como colocar isso em prática. Estou esquecendo de algo? qualquer conselho seria ótimo

    
por Rebbeca 13.09.2017 / 10:03

3 respostas

0

Se a saída sempre contiver apenas 2 linhas - solução awk para verificar por vários campos:

awk 'NR==2 { 
         printf "%s%s\n",($1=="us321000034006755" && $2=="ITdept")? "":"not ","found" 
     }' <(sh ./test1.sh)
    
por 13.09.2017 / 10:35
0

Se você precisar executar essa verificação dentro de outro script, poderá fazer isso com algo parecido com isto:

#!/bin/bash

var=$(./test1.sh | grep -c ITdept)

if [ $var > 0 ];
then
    echo "found"
else
    echo "Not found"
fi

O script conta o número de strings que contêm uma ou mais palavras 'ITdept'.

Ou em uma única linha (com awk):

./test1.sh | grep -c ITdept | awk '{if ($0==0) print "not found"; else if ($0>0) print "found"}'

corrija-me se eu entendi mal sua tarefa.

    
por 13.09.2017 / 10:32
0

Supondo que a saída conterá a string us321000034006755(separator)ITdept :

if cmd | grep -q '[[:<:]]us321000034006755[[:>:]][[:space:]]*[[:<:]]ITdept[[:>:]]'; then
   ...
fi

Se você tiver as duas substrings em variáveis:

if cmd | grep -q "[[:<:]]$user_id[[:>:]][[:space:]]*[[:<:]]$user_dept[[:>:]]"; then
   ...
fi

Os [[:<:]] e [[:>:]] corresponderão aos limites das palavras.

Seria muito mais fácil fazer isso usando awk , como RomanPerekhrest sugere , ou

cmd | awk '$1 == "us321000034006755" && $2 == "ITdept" { print "found"; exit } END { print "not found" }'
    
por 13.09.2017 / 10:43