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 –m13[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-7od 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