目录
终端打印
基础语法
有趣的拓展
在echo中使用转义序列
输出彩色文本
终端打印
终端是交互式工具,在终端中打印文本是绝大多数脚本中的基本任务。
基础语法
终端打印有两种方法输出文本,分别是 echo 和 printf (就是C/C++中的那个)。
在默认情况下,echo在每次调用时会添加一个换行符。
输出文本的方式也有很多种:
可以在字符串上加上双引号,例如
echo "Hello world!"
也可以直接输入文本,同样可以达到相同效果
echo Hello world!
另外还可以使用单引号
echo 'Hello world!'
但这三种打印方法都有一定局限性
使用不带引号的echo时,无法在文本中使用分号(;),因为分号在Bash Shell中被用作定界符。例如:
echo Hello;world
这句话将在输出完"Hello"后结束,并查找名为world的指令并执行。
还有一种可用于终端打印的命令是printf(是的,就是C语言中的那个printf)
printf "Hello world"
默认情况下,printf并不像echo命令那样会自动添加换行符,若需要则需手动添加。同时,Bash中的printf指令同C语言中一样,可以控制输出的格式(比如字符串的宽度、左右对齐方式等),比如下列脚本:
#!/bin/bash
#文件名: printf.sh
printf "%-5s %-10s %-4s\n" No. Name Mark
printf "%-5s %-10s %-4.2f\n" 1 Curry 92.32
printf "%-5s %-10s %-4.2f\n" 2 James 94.87
printf "%-5s %-10s %-4.2f\n" 3 Kevin 91.89
输出结果:
可以发现文本以格式化形式进行了输出。
其中的%s,%f又或其他%c,%d等这些都是格式替换符,如果学习过C语言,相信可以很好理解这个概念。
拓展:
%-5s中的'-'代表的意思是左对齐(若没有这个符号则默认采用右对齐),紧接着后面的数字'5'代表字符宽度,用以指定保留给某个变量的字符数,若内容不足指定的字符数,则会将余下的字符用空格符填充。
对于Mark字段,其格式化格式为%-4.2f,其中.2表示的是保留2个小数位
而后面的'\n'代表的是换行符。
有趣的拓展
在echo中使用转义序列
在默认情况下,echo会追加一个换行符到输出文本的末尾。可以使用选项 -n 来忽略结尾的换行符。
另外echo支持双引号字符串内的转义序列作为参数。如果要使用转义序列,则采用echo -e "含转义序列的字符串"。
例如:
echo -e "Hello\tBash\tWorld"
输出结果:
输出彩色文本
打印输出的文本并不是一成不变的白色,这个颜色可以通过转义序列来调整。
每种颜色都有相应的颜色码,可以参照下列表项设置你想输出的文本颜色
颜色 | 颜色码 |
重置 | 0 |
黑色 | 30 |
红色 | 31 |
绿色 | 32 |
黄色 | 33 |
蓝色 | 34 |
洋红 | 35 |
青色 | 36 |
白色 | 37 |
例如,输出绿色的"Hello World":
echo -e "\e[0;32mHello World \e[0m"
输出结果:
其中还可以对输出的文本形式(加粗、下划线、闪烁等)进行设置,其对应的样式码如下:
样式 | 样式码 |
正常 | 0 |
加粗 | 1 |
减淡 | 2 |
斜体 | 3 |
下划线 | 4 |
闪烁 | 5 |
设置背景颜色同字体颜色 | 7 |
字体透明 | 8 |
删除线 | 9 |
例如,使用删除线并将字体设置绿色,输出“Hello World!”
echo -e "\e[9;32mHello World \e[0m"
输出结果:
当然,文字的背景颜色也是可以进行设置,使用到的颜色码如下:
颜色 | 颜色码 |
重置 | 0 |
黑色 | 30 |
红色 | 31 |
绿色 | 32 |
黄色 | 33 |
蓝色 | 34 |
洋红 | 35 |
青色 | 36 |
白色 | 37 |
例如我要用蓝色作为背景色,字体形式用删除线,输出"Hello World":
echo -e "\e[9;44mHello World \e[0m"
输出结果: