O problema é que [[$NMAP | grep "Host is up" -ne ""]]
está muito longe da sintaxe bash válida. As mensagens de erro não dizem exatamente como consertá-lo, mas são um indício de que algo está seriamente errado.
-
[[
expressão]]
requer espaços dentro dos suportes. Veja Suportes na condição if: Por que estou recebendo erros de sintaxe sem espaço em branco? -
|
é o operador de pipe entre os comandos. Não é um operador em expressões condicionais . De fato[[ foo | bar ]]
é analisado como o comando[[ foo
canalizado para o comandobar ]]
, que não faz nada útil. - O operador
-eq
compara números inteiros, mas o que você coloque em volta não são inteiros.
Para testar se uma string contém uma substring, você pode usar o operador ==
em uma expressão condicional, ou um pipe através do grep (o que não envolvem uma expressão condicional). Com grep, você não está executando $NMAP
como um comando, você quer passar isso como entrada para o grep, então você precisa echo
no pipe. Passe -q
para grep, já que você só se importa com o status de retorno, não sobre sua saída.
if echo "$NMAP" | grep "Host is up" && echo "$NMAP" | grep "closed"; then …
Com uma expressão condicional:
if [[ $NMAP == *"Host is up"* || $NMAP == *"closed"* ]]; then …
Leia Confuso sobre os operadores [[vs [vs ( vs ((, que explica sobre expressões condicionais e como elas não são a única maneira de testar se uma condição é verdadeira. Além disso, leia Por que o meu shell script engasgar em espaço em branco ou outros caracteres especiais?