Если заявление не оценивается, как ожидалось. Я неправильно настраиваю переменные?


1

Я пытаюсь создать команду, которая позволит мне проверять сайты на наличие определенных слов. Я использовал \ в конце строки, чтобы обернуть его к следующему (не уверен, правильно ли я использовал их здесь), этих символов нет в моем сценарии.

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

then
  /usr/local/bin/sendemail -o tls=yes -f ***@gmail.com -t\
  trigger@recipe.ifttt.com -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\
  trigger@recipe.ifttt.com -s smtp.gmail.com:587 -xu ***@gmail.com -xp *** -u\
  $1 -m "does not contain the word " $2 ".";

fi

Ответы:


0

Вы используете grep чтобы проверить вывод без учета регистра, вы проверяете вывод grep с использованием чувствительного к регистру шаблона glob

Сделайте это вместо этого:

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 trigger@recipe.ifttt.com -s smtp.gmail.com:587 -xu ***@gmail.com -xp *** -u "$1" -m "$msg"

Работал как шарм! Спасибо за помощь. Похоже, у меня есть исследования глобальных паттернов.
TYPKRFT

0

Если заявление не оценивается, как ожидалось.

Проверка вашего скрипта с ShellCheck (находит ошибки в ваших сценариях оболочки.) дает следующие рекомендации:

$ 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:
  trigger@recipe.ifttt.com -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:
  trigger@recipe.ifttt.com -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.

$ 

Смотрите следующие ссылки для объяснения предложений:


Спасибо за отзыв, Дэвид! Я новичок в bash-скриптинге и искренне ценю инструмент ShellCheck!
TYPKRFT

ShellCheck не Проверка орфографии ;)
DavidPostill

Ха! Я только что понял. Еще раз спасибо!
TYPKRFT
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.