LV070-ANSI控制码
一、ANSI 控制码
1. 是什么?
ANSI 控制码用于在字符显示系统中控制光标移动和字符色彩等,常用于 BBS 系统中。 ANSI ESCAPE SEQUENCES 又称为 VT100 系列控制码,国内译为 ANSI 控制码。 ANSI 控制码依赖终端,不是依赖语言,所以在 shell , perl , C 里应用都是可以的。
ANSI 控制码开始的标志都为 ESC[ , ESC 对应 ASCII码表 的 033(八进制) ,在 Shell 编程中,输出的命令有 echo 和 printf , echo 需要用 -e 启用转义,两个输出命令通过 \033或者\e 来输入 ESC ,例如 \033[32m 即为 ESC[32m 。
2. 有哪些控制码?
| \033[0m | 关闭所有属性 |
| \033[1m | 设置高亮度 |
| \033[4m | 下划线 |
| \033[5m | 闪烁 |
| \033[7m | 反显 |
| \033[8m | 消隐 |
| \033[30m ~ \033[37m | 设置前景色(字体色) 30:黑 31:红 32:绿 33:黄 34:蓝 35:紫 36:深绿 37:白 |
| \033[40m ~ \033[47m | 设置背景色 40:黑 41:红 42:绿 43:黄 44:蓝 45:紫 46:深绿 47:白 |
| \033[nA | 光标上移n行 |
| \033[nB | 光标下移n行 |
| \033[nC | 光标右移n行 |
| \033[nD | 光标左移n行 |
| \033[y;xH | 设置光标位置,将光标移动到y行x列的位置 |
| \033[2J | 清屏,光标移到左上角 |
| \033[K | 清除从光标到行尾的内容 |
| \033[s | 保存光标位置 |
| \033[u | 恢复光标位置 |
| \033[?25l | 隐藏光标 |
| \033[?25h | 显示光标 |
【显示字符属性控制】
shell
[n1;n2;......m设定显示字符的属性状态。若有两个以上设定则以分号将代码隔开。除非重新设定,否则原设定之属性一直被保留,若想后边的不受影响,可以在结束后加一个 \033[0m 。
3. ANSI 码应用格式
- echo
shell
echo -e "\033[颜色值m 文本" # 最后加上\033[0m可以使其不影响其他字体- printf
shell
printf "\033[颜色值m 文本\n" # 最后加上\033[0m可以使其不影响其他字体二、应用实例
1. echo
shell
#!/bin/bash
echo -e "\033[31m Hello World! \033[0m"
echo -e "\e[31m Hello World! \e[0m"
echo -e "\033[31;46m Hello World! \033[0m"输出效果:

2. printf
shell
#!/bin/bash
printf "\033[31m Hello World! \033[0m Hello World!\n"
printf "\e[31m Hello World! \e[0m Hello World!\n"
printf "\033[31;46m Hello World! \033[0m Hello World!\n"输出效果:

3. 自用变量定义
shell
BLACK="\033[1;30m"
RED='\033[1;31m' # 红
GREEN='\033[1;32m' # 绿
YELLOW='\033[1;33m' # 黄
BLUE='\033[1;34m' # 蓝
PINK='\033[1;35m' # 紫
CYAN='\033[1;36m' # 青
WHITE='\033[1;37m' # 白
CLS='\033[0m' # 清除颜色
INFO="${GREEN}[INFO]${CLS}"
WARN="${YELLOW}[WARN]${CLS}"
ERR="${RED}[ERR ]${CLS}"