Linux 在终端中显示输出

预备知识

shell脚本通常以shebang①起始:

#!/bin/bash
  • 其中#!位于解释器路径之前。 /bin/bash是Bash的解释器命令路径。
  • 脚本中只有第一行可以使用shebang来定义解释该脚本所使用的解释器。

脚本的执行方式有两种:

  • 将脚本名作为 bash命令 的命令行参数

    $ bash myScript.sh
    

    如果将脚本作为bash的命令行参数来运行,那么就用不着使用shebang了。

  • 授予脚本执行权限,将其变为可执行文件

    $ chmod 755 myScript.sh
    $ ./myScript.sh		# 使用相对路径或全路径皆可
    

注释部分以#为起始,一直延续到行尾。


echo 命令

echo是用于终端打印的最基本命令。

默认情况下, echo在每次调用后会添加一个换行符

ming@ming-Aspire-E5-572G:~$ echo "Welcome to Bash"
Welcome to Bash
ming@ming-Aspire-E5-572G:~$ 

使用单引号、双引号或两者都不使用都可以:

ming@ming-Aspire-E5-572G:~$ echo Welcome to Bash
Welcome to Bash
ming@ming-Aspire-E5-572G:~$ echo 'text in quotes'
text in quotes
ming@ming-Aspire-E5-572G:~$ 

这些方法看起来相似,但各有特定的用途及副作用。双引号允许shell解释字符串中出现的特殊字符。而单引号不会对其做任何解释,且变量替换不会在单引号中执行

ming@ming-Aspire-E5-572G:~$ name=kenny
ming@ming-Aspire-E5-572G:~$ echo "hello, $name"
hello, kenny
ming@ming-Aspire-E5-572G:~$ echo 'hello, $name'
hello, $name
ming@ming-Aspire-E5-572G:~$ 

如果需要打印特殊字符,那就不要将其放入双引号中,而是使用单引号,或是在特殊字符之前加上一个反斜线。

如果不使用引号,我们无法在echo中使用分号,因为分号在Bash shell中用作命令间的分隔符

ming@ming-Aspire-E5-572G:~$ echo hello; hello
hello

Command 'hello' not found, but can be installed with:

sudo apt install hello            
sudo apt install hello-traditional

ming@ming-Aspire-E5-572G:~$ 

默认情况下, echo会在输出文本的尾部追加一个换行符。可以使用选项-n来禁止这种行为。

echo同样接受包含转义序列的双引号字符串作为参数。在使用转义序列时,需要使用echo -e "包含转义序列的字符串"这种形式。

ming@ming-Aspire-E5-572G:~$ echo -e "1\t2\t3"
1	2	3
ming@ming-Aspire-E5-572G:~$ echo "1\t2\t3"
1\t2\t3

printf 命令

另一个可用于终端打印的命令是printf。该命令使用的参数和C语言中的printf函数一样。

printf命令接受引用文本或由空格分隔的参数。我们可以在 printf 中使用格式化字符串来指定字符串的宽度、左右对齐方式等。默认情况下, printf 并不会自动添加换行符,我们必须在需要的时候手动指定。

ming@ming-Aspire-E5-572G:~$ printf "%-5s %-10s %-4s\n" No Name Mark
No    Name       Mark
ming@ming-Aspire-E5-572G:~$ printf "%-5s %-10s %-4.2f\n" 1 Sarath 80.3456
1     Sarath     80.35

%s、 %c、 %d和%f都是格式替换符( format substitution character),它们定义了该如何打印后续参数。 %-5s指明了一个格式为左对齐且宽度为5的字符串替换( -表示左对齐)。如果不指明-,字符串就采用右对齐形式。宽度指定了保留给某个字符串的字符数量。对Name而言,其保留宽度是10。因此,任何Name字段的内容都会被显示在10字符宽的保留区域内,如果内容不足10个字符,余下的则以空格填充;如果内容大于10个字符,不会发生截断。

对于Mark字段,我们将其格式化为%-4.2f,其中.2指定保留两位小数。注意,在每行的格式字符串后都有一个换行符( \n)。


打印彩色输出

打印不同颜色的核心格式为:<ESC>[{attr};{fg};{bg}m。其中,在ascii中也用“^[”表示,在shell脚本中为 “\”字符。

attr表示显示字体的属性,如加粗、下划线、闪烁等。值如下:

0    Reset All Attributes (return to normal mode)
1    Bright (Usually turns on BOLD)
2    Dim
3    Underline
5    Blink(文字闪烁)
7    Reverse(前景色和背景色反转)
8    Hidden(看不见文字)

fg是前景颜色,即字体颜色,值如下:

30    Black
31    Red
32    Green
33    Yellow
34    Blue
35    Magenta
36    Cyan
37    White

bg是背景颜色,值如下:

40    Black
41    Red
42    Green
43    Yellow
44    Blue
45    Magenta
46    Cyan
47    White

在这里插入图片描述
其中 \e[0m 将颜色重新置回。

猜你喜欢

转载自blog.csdn.net/fcku_88/article/details/88599392