追加読書

追加読書

私は以下を使用する小さなBashスクリプトを書いた。spfquery自分のドメインの電子メールSPFレコードを確認するには(すべてのプロバイダのIPアドレスを通過する場合):

#!/bin/bash

# RED="\033[1;31m"
GREEN="\033[1;32m"
NOCOLOR="\033[0m"

email="[my email address]" # deleted for bots not to hound me

declare -a ips=("88.86.120.212" "88.86.120.223" "88.86.120.250" "88.86.120.213" "88.86.120.103" "46.234.104.23" "46.234.104.24")

echo -e "\n\n"

for ip in "${ips[@]}"
do
    echo -e "${GREEN}$ip${NOCOLOR}"
    spfquery -sender $email -ip $ip -helo kolbaba.stable.cz
    echo -e "\n\n"
done

REDコメントが付いていますので参考にしてください。その理由は、生成されたメッセージが次のいずれかで始まりたいからです。

  • fail
  • softfail
  • neutral
  • unknown
  • error
  • none

つまり、次のような場合ではありません。

  • pass

赤色に着色されています。

しかし、これをどうするかは私にとって謎ですか?

答え1

zsh代わりに使用してくださいbash

#! /bin/zsh -

email="[email protected]"

ips=(88.86.120.{212,223,250,213,103} 46.234.104.{23,24})

print '\n\n'

for ip ($ips) {
  spfquery -sender $email -ip $ip -helo kolbaba.stable.cz &&
    color=green || color=red

  print -P "%F{$color}$ip%f\n"
}

print -P開いている急速な拡張パラメータ%F{color}設定展望色を指定して%fリセットしてください。

変数の内容(および)にもヒント拡張が適用され($color文字を含めることができる場合はそれを念頭に置いてください(オプションが有効な場合はそれ以上)$ip)、エスケープシーケンス拡張は適用されません(複数のAtなど)。%promptsubst-r\n

色にアクセスする他の方法zsh

  • 自動ローディングcolors機能:

    autoload colors; colors
    echo $fg[green]text$reset_color
    
  • パラメータ拡張フラグは、%変数の内容をすばやく拡張できます。

    var='%F{green}' reset=%f
    echo ${(%)var}text${(%)reset}
    

    また見なさい:

    echo ${(%):-%F{green}}text${(%):-%f}
    

    またはより良い

    printf '%s\n' "${(%):-%F{green}}$text${(%):-%f}"
    

    保証されたコンテンツをそのまま出力します$text

  • このzsh/cursesモジュールは、端末で擬似グラフィックアプリケーションを作成するために使用されます。

答え2

spfqueryの終了コードを確認し、if / elseを使用してパススルーすることを確認する必要があります。このような:

#!/bin/bash

RED="\033[1;31m"
GREEN="\033[1;32m"
NOCOLOR="\033[0m"

email="[email protected]"

declare -a ips=("88.86.120.212" "88.86.120.223" "88.86.120.250" "88.86.120.213" "88.86.120.103" "46.234.104.23" "46.234.104.24")

echo -e "\n\n"

for ip in "${ips[@]}"
do
    spfquery -sender $email -ip $ip -helo kolbaba.stable.cz

    exit_status=$?
    if [ $exit_status -eq 0 ]; then
        echo -e "${GREEN}$ip${NOCOLOR}"
    else
        echo -e "${RED}$ip${NOCOLOR}"
    fi

    echo -e "\n\n"
done

答え3

私は[...]で始まる結果メッセージを赤で表示したいと思います。

あなたの問題は、あなたが着色したいということですspfqueryコマンドで生成された出力。これはコマンドを実行しても達成されません。それから色変更制御シーケンスをエクスポートします。別の答えで得ることは、IPアドレスにのみ色を付けることです。これはあなたが望むものかもしれませんが、あなたの質問が要求するものではありません。

あなたが探しているツールは次のとおりです。これ実際にやりたいことは、次のようなさまざまなカラーフィルタユーティリティです。イーストバンカラチcolorizeラドバン・ガラビクgrcジョア・キム・アンダーソンcolortail。適切な項目を識別し、それを介して出力を供給するspfqueryか、実際にループfor全体を識別するように構成します。

追加読書

関連情報