进一步阅读

进一步阅读

我写了一个小 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的情况下要记住这一点),并且没有,转义序列扩展(例如多于)。%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循环。

进一步阅读

相关内容