Ifステートメントが期待どおりに評価されない。変数を間違って設定していますか?


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大文字と小文字を区別せずに出力を確認するために使用しており、大文字と小文字を区別するglobパターンを使用して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"

魅力のように働いた!助けてくれてありがとう。私はグロブパターンの研究の塊を持っているように聞こえます。
TYPKRFT

0

Ifステートメントが期待どおりに評価されない。

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.

$ 

提案の説明については、次のリンクを参照してください。


フィードバックをありがとうDavid!私はスクリプトをbashするのは初めてで、ShellCheckツールに本当に感謝しています!
TYPKRFT

シェルチェックスペルチェックではありません ;)
DavidPostill
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.