今天安装某国产数据库的时候, 看到终端有个类似转圈圈的效果, 想起以前写脚本的时候总想着写些狐狸胡绍的效果. 于是这里就简单总结下
看到的效果图如下:
这种动态展示的原理其实就是输出普通字符, 然后输出 退格(\b) 字符,这样再输出字符的时候, 新字符就把就字符的位置覆盖了. 从而达到看起来像是在原始位置变化的效果.
简单点说就是, 将光标移动到某个位置, 比如 换行 (\r) 能将光标移动到行首
基于这两点我们就能制作一些动态效果了.
我们只需要每次在同一个位置依次循环输出/ - \ |
这4个字符, 就能达到 文章开头的转圈圈效果, 比如使用如下shell代码
while true;do
echo -ne '[/]\b\b\b'; sleep 0.2
echo -ne '[-]\b\b\b'; sleep 0.2
echo -ne '[\\]\b\b\b'; sleep 0.2
echo -ne '[|]\b\b\b'; sleep 0.2
done;
其实我之前有讲过mysql导入进度查看的, tar之类的解压也是能查看进度的,有兴趣的去翻翻以前的文章, 我这里就直接演示效果了.
jindutiao(){
percentage=$1
msg=$2
filled_length=$[ ${percentage} / 2 ]
bar=$(printf "%-50s" "$(printf '#%.0s' $(seq 1 $filled_length))")
echo -ne "\r[$bar] $percentage% ${msg}"
}
for i in {1..100};do
jindutiao $i "测试进度的"
sleep 0.01
done
echo ""
编写shell脚本的时候, 往往还会加一些颜色用于提示. 有时候也会加一些一闪一闪的效果, 比如如下为我那mysql安装脚本里的代码
echo_color() {
detaillog1=$3
[[ -z ${detaillog1} ]] && detaillog1=${details}
case $1 in
green)
echo -e "\033[32;40m$2\033[0m"
;;
red)
echo -e "\033[31;40m$2\033[0m"
;;
error|err|erro|ERROR|E|e)
echo -e "[\033[1;5;41;33mERROR\033[0m `date +%Y%m%d-%H:%M:%S`] \033[1;41;33m$2\033[0m"
;;
redflicker)
echo -e "\033[1;5;41;33m$2\033[0m"
;;
info|INFO|IF|I|i)
echo -e "[\033[32;40mINFO\033[0m `date +%Y%m%d-%H:%M:%S`] \033[32;40m$2\033[0m"
;;
highlightbold)
echo -e "\033[1;41;33m$2\033[0m"
;;
warn|w|W|WARN|warning)
echo -e "[\033[31;40mWARNNING\033[0m `date +%Y%m%d-%H:%M:%S`] \033[31;40m$2\033[0m"
;;
detail|d|det)
echo -e "[\033[32;40mINFO\033[0m `date +%Y%m%d-%H:%M:%S`] \033[32;40m$2\033[0m"
echo "[`date +%Y%m%d-%H:%M:%S`] $2" >> ${detaillog1}
;;
n|null)
echo -e "$2"
;;
*)
echo "INTERNAL ERROR: echo_color KEY VALUE"
;;
esac
}
其它色儿可以使用如下脚本快速查看
for COLOR in {1..255}; do echo -en "\e[38;5;${COLOR}m \\e\[38;5;${COLOR}m"; done;echo -e "\n\033[31;40mecho -e \"\\\eCOLOR STRINGS_BY_YOURSELF\"\033[0m"
相当的花里胡哨.
还有些会在登录的时候加一个提示信息, 通常会是一个字符构成的图像. 也可以在登录的时候开一个终端以供审计使用, 之前也有讲过. 比如:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。