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

2 ответа2

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.

$ 

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

0

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

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

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"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .