1. ホーム
  2. バッシュ

[解決済み】Bashで "if "文に対する "and "演算子

2022-04-01 15:32:40

質問

ウェブサイトがダウンしているかどうかを確認するための簡単なBashスクリプトを作成しようとしているのですが、なぜか"と"の演算子が機能しません。

#!/usr/bin/env bash

WEBSITE=domain.com
SUBJECT="$WEBSITE DOWN!"
EMAILID="[email protected]"
STATUS=$(curl -sI $WEBSITE | awk '/HTTP\/1.1/ { print $2 }')
STRING=$(curl -s $WEBSITE | grep -o "string_to_search")
VALUE="string_to_search"

if [ $STATUS -ne 200 ] && [[ "$STRING" != "$VALUE" ]]; then
    echo "Website: $WEBSITE is down, status code: '$STATUS' - $(date)" | mail -s "$SUBJECT" $EMAILID
fi

また、"-a"演算子も効きません。

if [ $STATUS -ne 200 ] -a [[ "$STRING" != "$VALUE" ]]

また、どのような場合に使用するのか、アドバイスをお願いします。

  • シングル角括弧とダブル角括弧
  • 括弧

?

解決方法は?

このような場合、以下のようになります。 ${STATUS} は空です。 したほうがいいかもしれませんね。

if ! [ "${STATUS}" -eq 200 ] 2> /dev/null && [ "${STRING}" != "${VALUE}" ]; then

または

if [ "${STATUS}" != 200 ] && [ "${STRING}" != "${VALUE}" ]; then

スクリプトの何が問題なのかが正確に示されていないので、何とも言えません。

個人的な意見:決して [[ . これは重要なエラーメッセージを抑制し、異なるシェルに移植することができません。