最近看redis源码,redis-cli源码中出现很多奇怪的字符串如"\x1b[0K",谷歌发现这是Linux终端特殊控制符,可以控制终端的显示效果,如清屏,前景背景色设置,字体设置等。
可通过命令:man console_codes 查看详细文档。
\x1b 表示16进制码1b,1b对应ascii码是ESC,参见ANSI标准,前缀1B赋予序列新含义。
[是一个CSI(Control sequence introducer),转义序列作用由最后一个字符决定,即K(清除行)
0是参数,表恢复默认属性。
该语句的含义是:清除光标右边文本
echo -e "\x1b[2J#清屏,也可以表示\033[2J(8进制)
echo -e "\x1b[34m#设置前景色为34(蓝色)
一. 常用属性
1.常用控制码
\x1b[0m 关闭所有属性
\x1b[1m 设置高亮度
\x1b[4m 下划线
\x1b[5m 闪烁
\x1b[7m 反显
\x1b[8m 消隐
\x1b[30m -- \x1b[37m 设置前景色
\x1b[40m -- \x1b[47m 设置背景色
\x1b[nA 光标上移n行
\x1b[nB 光标下移n行
\x1b[nC 光标右移n列
\x1b[nD 光标左移n列
\x1b[y;H 设置光标位置
\x1b[2J 清屏
\x1b[K 清除从光标到行尾的内容
\x1b[s 保存光标位置
\x1b[u 恢复光标位置
\x1b[?25l 隐藏光标
\x1b[?25h 显示光标
2.文字背景色彩数字: (颜色范围:40 - 49)
40: 黑色
41: 深红色
42: 绿色
43: 黄色
44: 蓝色
45: 紫色
46: 深绿色
47: 白色
3.文字前景色数字: (颜色范围: 30 - 39)
30: 黑色
31: 红色
32: 绿色
33: 黄色
34: 蓝色
35: 紫色
36: 深绿色
37: 白色
4. 其它
0:重置默认效果 如显示红色效果:printf "\x1b[31mhello\x1b[0m",注:securecrt仿真终端设置为xterm
1:加粗
2:半高亮,效果不明显
4:下划线
5:闪烁#这个比较好玩,echo -e "\x1b[5mhelloworld\x1b[0m",发现helloworld在不停闪烁
二.进度条实现
#!/bin/sh showprogress() { code="" for((i=1;i<=20;i++)); do code=${code}"$1" if [ $2 -eq "1" ]; then printf "%3d%% \x1b[31m%s\x1b[0m\r" $(($i*5)) $code else printf "%3d%% \x1b[41m\x1b[31m%s\x1b[0m\r" $(($i*5)) $code fi sleep 0.5 done echo } showprogress "#" 1 showprogress "1" 2
效果: