Lin*_*eak 7 colors shell-script
我写了一个小 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
Run Code Online (Sandbox Code Playgroud)
注意,有RED
注释掉。那是因为我希望生成的消息以以下任何一个开头:
fail
softfail
neutral
unknown
error
none
即不与:
pass
以红色着色。
但如何做到这一点对我来说是个谜?
Sté*_*las 10
用zsh
代替bash
:
#!/bin/zsh
email="info@vlastimilburian.cz"
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"
}
Run Code Online (Sandbox Code Playgroud)
print -P
打开参数的提示扩展where %F{color}
is to set theforeground color, and %f
reset it.
请注意,其中 ($color
和$ip
) 中变量的内容也受到提示扩展(在它们可能包含%
字符(或更多,如果promptsubst
启用该选项)的情况下要记住的事情)和转义序列(\n
如上)扩展.
其他访问颜色的方法zsh
:
该colors
autoloadable功能:
autoload colors; colors
echo $fg[green]text$reset_color
Run Code Online (Sandbox Code Playgroud)
的%
参数扩展标志,使得能够对一个变量的内容提示扩展:
var='%F{green}' reset=%f
echo ${(%)var}text${(%)reset}
Run Code Online (Sandbox Code Playgroud)
也可以看看:
echo ${(%):-%F{green}}text${(%):-%f}
Run Code Online (Sandbox Code Playgroud)
或更好
printf '%s\n' "${(%):-%F{green}}$text${(%):-%f}"
Run Code Online (Sandbox Code Playgroud)
以保证$text
原样输出的内容。
zsh/curses
模块用来在终端写入伪图形应用程序。您可能想要检查 spfquery 的退出代码,然后使用 if/else 来查看它是否通过。像这样的东西:
#!/bin/bash
RED="\033[1;31m"
GREEN="\033[1;32m"
NOCOLOR="\033[0m"
email="info@vlastimilburian.cz"
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
Run Code Online (Sandbox Code Playgroud)