추가 읽기

추가 읽기

나는 다음을 사용하는 작은 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루프를 식별하도록 구성합니다.

추가 읽기

관련 정보