【脚本语言】Shell Script - 终端打印指令

        本文共计1559字,预计阅读时间6分钟

目录

终端打印

基础语法

有趣的拓展

在echo中使用转义序列

输出彩色文本


终端打印

        终端是交互式工具,在终端中打印文本是绝大多数脚本中的基本任务。

基础语法

        终端打印有两种方法输出文本,分别是 echoprintf (就是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"

输出结果: