Li Jinli
不必因昨天的眼泪、湿了今天的太阳。

linux_shell学习(1)

1.1在终端中显示输出

1.1.1 预备知识

shell脚本通常以#! /bin/bash起始,其中#!位于解释器路径之前,/bin/bash是bash的解释器命令路径,bash将以#开头的行视为注释,脚本中只有第一行可以使用#!来定义解释该脚本所用的解释器

脚本的执行方式有两种:

(1)将脚本名作为命令行参数

 

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

 

如果将脚本作为bash的命令行参数来运行,就用不着使用#!了,可以利用#!来实现脚本的独立运行。可执行脚本使用#!之后的解释器路径来解释脚本。

赋予脚本可执行权限

 

这样使得所有用户可以按照下列方式执行该脚本(./表示当前目录)

 

1.1.2 实战演练

echo是用于终端打印的最基本命令,只需要将文本放入双引号中,echo命令就可以将其中的文本在终端中打印出来,不适用双引号也可以得到同样的输出结果:

 

使用单引号:

 

他们看起来很相似,但是都有特定的用途和作用。双引号允许shell解释字符串中出现的特殊字符,单引号不会对其做任何解释。

l  举例如下;

 

如果需要打印!这样的特殊字符,不能将其放入双引号中,而是使用单引号,或者在特殊字符之前加上转义字符\,例如:

 

如果不使用引号,就无法在echo中使用分号,因为分号在bash shell中用作命令间的分隔符,如下,这条命令会将echo hello作为一个命令,将hello作为另一个命令:

 

另一个可用于终端打印的命令是printf,例如:

 

printf命令接受引用文本或由空格分隔的参数,我们可以在printf中使用格式化字符串来指定字符串的宽度,左右对齐方式等。printf不会自动添加换行符,我们需要手动指定,例如:

 

可以得到如下格式化的输出:

 

1.1.3 工作原理

%s,%c,%d,%f都是格式替换符,他们定义了该如何打印后续参数。%-5s指明了一个格式为左对齐且宽度为5的字符串替换(-表示左对齐)。如果不指定-,则右对齐。宽度指定了保留给某个字符串的字符数量,以name为例,其保留宽度是10,因此任何name字段的内容都会被显示在10字符宽的保留区域内,如果内容不足10则以空格补充。

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

1.1.4 补充内容

1.在echo中转义换行符

echo会在输出文本的尾部追加一个换行符,可以使用-n来禁止追加换行符,在使用转义序列时需要使用echo -e “包含转义序列的字符串”这种形式:

 

2.打印彩色输出

脚本可以使用转义序列在终端中生成彩色文本,文本颜色是由对应的色彩码来描述的,其中包括:重置=0,黑色=30,红色=31,绿色=32,黄色=33,蓝色=34,洋红=35,青色=36,白色=37。

要打印彩色文本,可输入如下命令:

 

其中\e[1;31m是一个转义字符串,可以将颜色设为红色,\e[0m将颜色重新置回。只需要将31替换成想要的色彩码就可以了。

对于彩色背景,经常使用的颜色码是:重置=0,黑色=40,红色=41,绿色=42,黄色=43,蓝色=44,洋红=45,青色=46,白色=47。

设置彩色背景,可以输入如下命令:

 

 

1.2 使用变量与环境变量

1.2.1 预备知识

变量名由字母,数字,下划线组成,不包含空白字符。在脚本中常用大写字母命名环境变量,小写字母命名其他变量。

可以使用env或者printenv命令查看当前shell中定义的全部环境变量:

 

查看其他进程的环境变量,使用如下命令(pid是进程id):

 

1.2.2 实战演练

可以使用等号操作符为变量赋值:varName(变量名)=value(赋给变量的值)。注意:两边没有空格的等号是赋值操作符,有空格是等量关系测试。

在变量名之前加上美元符号($)就可以访问变量的内容

 

可以在printf,echo或其他命令的双引号中引用变量值:

 

输出如下

 

因为shell使用空白字符来分隔单词,所以我们需要加上一对花括号来告诉shell这里的变量名是fruit,而不是fruit(s)。

使用单引号时,变量不会被扩展,原样显示:

 

如果变量var已经定义过,使用双引号会显示该变量的值,如果没定义过则不显示:

  

1.2.3 补充内容

1.获得字符串的长度

 

2.识别当前所使用的shell

 

 

 

 

 

posted on 2021-01-27 14:02  lijinli  阅读(95)  评论(0)    收藏  举报