Se a declaração não estiver sendo avaliada como esperado. Estou configurando minhas variáveis incorretamente?

1

Estou tentando criar um comando que me permita verificar sites em busca de palavras específicas. Eu usei \ no final da linha para envolvê-lo para o próximo, (não tenho certeza se eu usei os corretamente aqui) esses caracteres não estão no meu script.

check=$(lynx -source $1 | grep -i $2)
if [[ $check == *"$2"* ]]

then
  /usr/local/bin/sendemail -o tls=yes -f ***@gmail.com -t\
  [email protected] -s smtp.gmail.com:587 -xu ***@gmail.com -xp *** -u\
  $1 -m "contains the word " $2 ".";

else
  /usr/local/bin/sendemail -o tls=yes -f ***@gmail.com -t\
  [email protected] -s smtp.gmail.com:587 -xu ***@gmail.com -xp *** -u\
  $1 -m "does not contain the word " $2 ".";

fi
    
por TYPKRFT 22.03.2016 / 22:10

2 respostas

0

Você está usando grep para verificar a saída sem distinção entre maiúsculas e minúsculas, então está verificando a saída do grep usando um padrão glob que diferencia maiúsculas e minúsculas.

Faça isso:

if lynx -source "$1" | grep -qi "$2"; then
    msg="contains the word '$2'."
else
    msg="does not contain the word '$2'."
fi

/usr/local/bin/sendemail -o tls=yes -f ***@gmail.com -t [email protected] -s smtp.gmail.com:587 -xu ***@gmail.com -xp *** -u "$1" -m "$msg"
    
por 22.03.2016 / 22:22
0

Se a Declaração não estiver avaliada como esperado.

Verificar o seu script com ShellCheck (encontra erros em seus scripts de shell) fornece as seguintes sugestões:

$ shellcheck myscript

Line 1:
check=$(lynx -source $1 | grep -i $2)
                     ^-- SC2086: Double quote to prevent globbing and word splitting.
                                  ^-- SC2086: Double quote to prevent globbing and word splitting.

Line 5:
  /usr/local/bin/sendemail -o tls=yes -f ***@gmail.com -t\
                                         ^-- SC2035: Use ./*glob* or -- *glob* so names with dashes won't become options.

Line 6:
  [email protected] -s smtp.gmail.com:587 -xu ***@gmail.com -xp *** -u\
                                                     ^-- SC2035: Use ./*glob* or -- *glob* so names with dashes won't become options.
                                                                       ^-- SC2035: Use ./*glob* or -- *glob* so names with dashes won't become options.

Line 7:
  $1 -m "contains the word " $2 ".";
  ^-- SC2086: Double quote to prevent globbing and word splitting.
                             ^-- SC2086: Double quote to prevent globbing and word splitting.

Line 10:
  /usr/local/bin/sendemail -o tls=yes -f ***@gmail.com -t\
                                         ^-- SC2035: Use ./*glob* or -- *glob* so names with dashes won't become options.

Line 11:
  [email protected] -s smtp.gmail.com:587 -xu ***@gmail.com -xp *** -u\
                                                     ^-- SC2035: Use ./*glob* or -- *glob* so names with dashes won't become options.
                                                                       ^-- SC2035: Use ./*glob* or -- *glob* so names with dashes won't become options.

Line 12:
  $1 -m "does not contain the word " $2 ".";
  ^-- SC2086: Double quote to prevent globbing and word splitting.
                                     ^-- SC2086: Double quote to prevent globbing and word splitting.

$ 

Veja os links a seguir para explicação das sugestões:

por 22.03.2016 / 22:17