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)
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
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)
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.
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" }'
Tags grep awk linux shell-script