Bashの条件文でgrepを使用する

Bashの条件文でgrepを使用する

私はbashスクリプトに初めてアクセスし、基本と思われるものを試しました。 Ubuntu 14.04を実行しているサーバーで更新されたDDNSを実行したいと思います。

dnsimpleでいくつかのコードを借りてこれまでに得たコードは次のとおりです。

#!/bin/bash

LOGIN="email"
TOKEN="token"
DOMAIN_ID="domain"
RECORD_ID="record"
IP=`curl -s http://icanhazip.com/`

OUTPUT=`
curl -H "Accept: application/json" \
     -H "Content-Type: application/json" \
     -H "X-DNSimple-Domain-Token: $TOKEN" \
     -X "PUT" \
     -i "https://api.dnsimple.com/v1/domains/$DOMAIN_ID/records/$RECORD_ID" \
     -d "{\"record\":{\"content\":\"$IP\"}}"`

if ! echo "$OUTPUT" | grep -q "(Status:\s200)"; then

echo "match"

$(echo "$OUTPUT" | grep -oP '(?<="message":")(.[^"]*)' >> /home/ddns/ddns.log)
$(echo "$OUTPUT"| grep -P '(Status:\s[0-9]{3}\s)' >> /home/ddns/ddns.log)

fi

アイデアは5分ごとに実行され、cronjobを使用して作業することです。その後、カールの出力をチェックして、ステータスが「200」か別のものかを確認したいと思います。それ以外の場合は、出力をファイルに保存したいと思います。

私が働けないのはif陳述です。私が理解したように、コマンドを-q実行すると、grepそのステートメントの終了コードが提供されますif。しかし、私はそれを動作させることができないようです。私はどこで間違っていますか?

ベストアンサー1

ほぼすべて来ました。感嘆符だけを省略してください。

OUTPUT='blah blah (Status: 200)'
if echo "$OUTPUT" | grep -q "(Status:\s200)"; then
    echo "MATCH"
fi

結果:

MATCH

ifgrep が終了コード 0 (一致項目を表す) を返す場合、条件は満たされます。感嘆符は!これを無効にします。

おすすめ記事