您的位置:首页 > 运维架构 > Shell

shell变量介绍及变量子串的使用

2018-12-16 10:12 711 查看

shell变量介绍及变量子串的使用

 

shell变量可分为两大类:环境变量(全局变量)和局部变量。环境变量又分为内置的环境变量和自定义的环境变量。内置的环境变量是Linux操作系统自带的,而自定义的环境变量是用户根据实际需要进行自己定义的。下面将详细介绍各种变量。

1、环境变量

环境变量的作用:一般用于定义shell的运行环境,保证shell命令的正确执行,Shell通过环境变量来确定登陆用户名,命令路径,终端类型,登陆目的等。

 

环境变量的创建:可以在命令行中设置创建,但用户退出命令行时这些变量值就会丢失,因此,若希望永久保存环境变量,可在用户家目录下的 .bash_profile 或者 .bashrc 文件中或全局配置 /etc/bashrc 或 /etc/profile 文件或 /etc/profile.d/ 中定义。将环境变量放在这些文件中,每次用户登陆时这些变量值都会被初始化一次。一般,环境变量都为大写,使用export命令导出定义环境变量

2、内置的环境变量

内置的环境变量,如HOME, PATH, SHELL, UID,USER,HOSTNAME 等,都是在用户登陆之前就已经被/bin/login程序设置好了。

3、自定义的环境变量

自定义的环境变量: 如果想要设置环境变量,就要在给变量赋值之后或设置变量时使用export命令。带-x选项的declare内置命令也可以完成同样的功能。(注意:输出变量时不要在变量名前加$)

4、局部变量

本地变量在用户当前的shell生存期的脚本中使用。在一个函数中将某个变量声明为local,则该变量就是一个局部变量,只在本函数中有效。

 

5、shell特殊变量

5.1、位置变量

变量名称

变量作用

$0

获取当前执行的shell脚本的文件名,包括路径

$n

获取当前执行的shell脚本的第n个参数值,如果n大于10,需要使用{}把数字括起来

$*

获取当前shell的所有参数,将所有的命令行参数视为单个字符串

$#

获取当前shell命令行中参数的总个数

$@

获取当前shell的所有参数,将所有的命令行参数视为多个字符串

 

5.2、进程状态变量

变量名称

变量作用

$?

返回上一个命令的返回值,一般用于判断上一个命令是否成功执行

0(表示命令执行成功) 1(命令执行失败) 2(权限拒绝)

$$

显示当前shell的进程号

$!

执行上一个指令的进程号

$_

获取执行的命令或脚本的最后一个参数

 

6、变量子串的常用操作

6.1、计算变量A的字符串长度3种方法

[root@localhost ~]# A="good morning"
[root@localhost ~]# echo ${#A}
12
[root@localhost ~]# echo $A|wc –m
13
[root@localhost ~]# echo $(expr length “$A”)
12

以上三种方法第一种效率最高,第二种效率最低,第三种效率居中

 

6.2、截取变量A的第2个字符后面的所有字符

[root@localhost ~]# echo ${A:2}
od morning

 

6.3、截取变量A的第2个字符后面的5个字符

[root@localhost ~]# echo ${A:2:5}
od mo
[root@localhost ~]# echo $A|cut -c 3-7
od mo

 

6.4、从变量A的字符开头开始删除最短匹配”goo”字符串(注意只能从开头开始)

[root@localhost ~]# echo ${A#goo}
d morning

6.5、从变量A的字符开头开始删除最长匹配”goo”字符串

[root@localhost ~]# echo ${A##goo}
d morning

6.6、从变量A的字符结尾开始删除最短匹配”ing”字符串(注意只能从结尾开始)

[root@localhost ~]# echo ${A%ing}
good morn

6.7、从变量A的字符结尾开始删除最长匹配”ing”字符串

[root@localhost ~]# echo ${A%%ing}
good morn

 

6.8、使用after字符串来替换A变量中的第一个匹配的morning字符串

[root@localhost ~]# echo ${A/morning/after}
good after

6.9、使用after字符串来替换A变量中的结尾匹配的morning字符串

[root@localhost ~]# echo ${A/%morning/after}
good after

 

6.10、使用hello字符串来代替从A变量的字符串开头匹配的good字符串

[root@localhost ~]# echo ${A/#good/hello}
hello morning


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息