Você não precisa de grep
aqui, awk
pode fazer a correspondência de padrões no número da porta.
awk
também pode acompanhar se a porta foi encontrada ou não e sair com um código de saída apropriado.
Por exemplo:
$ port=23
$ awk '$2 ~ /^'"$port"'\// {print $1 ; found=1} END {exit !found}' /etc/services
telnet
$ echo $?
0
$ port=99999
$ awk '$2 ~ /^'"$port"'\// {print $1 ; found=1} END {exit !found}' /etc/services
$ echo $?
1
O exit !found
funciona porque as variáveis awk
assumem o padrão como zero (ou verdadeiro) se não tiverem sido definidas anteriormente - exit !0
is exit 1
. Portanto, se definirmos found=1
quando correspondermos, então exit !found
no bloco END será exit 0
.
Veja como usar o script awk com seu if / then / else.
#!/bin/bash
awk '$2 ~ /^'"$1"'\// {print $1 ; found=1} END {exit !found}' /etc/services
if [ $? -eq 0 ]; then
echo "Service(s) is(are) found correctly!"
else
echo "There is(are) no such service(s)!"
fi
Você também pode fazer assim:
if awk '$2 ~ /^'"$1"'\// {print $1;found=1} END{exit !found}' /etc/services ; then
echo "Service(s) is(are) found correctly!"
else
echo "There is(are) no such service(s)!"
fi
Ou até mesmo assim:
awk '$2 ~ /^'"$1"'\// {print $1 ; found=1} END {exit !found}' /etc/services \
&& echo "Service(s) is(are) found correctly!" \
|| echo "There is(are) no such service(s)!"