1.变量测试的用法

 shell支持变量测试和默认赋值,当一个变量不存在的时候,可以默认给此变量进行赋值。变量测试和赋值有多种方式,常见的有四种情况

变量 含义
${var:-word1} 若var存在且非空,则值为$var; 若var未定义或为空值,则值为word1,但var的值不变
${var:=word2} 若var存在且非空,则值为$var; 若var未定义或为空值,则值为word2,且var被赋值word2
${var:?word3} 若var存在且非空,则值为$var; 若var未定义或为空值,则输出信息word3,并终止脚本
${var:+world4} 若var存在且非空,则值为word4,否则返回空值,但var的值不变

看下面的操作过程,更能清晰的理解变量测试的含义

[root@localhost ~]# var=
[root@localhost ~]# echo ${var:-word1}
word1
[root@localhost ~]# echo "$var"

[root@localhost ~]# var=wen
[root@localhost ~]# echo ${var:-word1}
wen
[root@localhost ~]# var=
[root@localhost ~]# echo ${var:=word2}
word2
[root@localhost ~]# echo "$var"
word2
[root@localhost ~]# echo ${var:?word3}
word2
[root@localhost ~]# echo ${var:+word2}
word2
[root@localhost ~]# var=
[root@localhost ~]# echo ${var:+word4}

[root@localhost ~]# echo "$var"

[root@localhost ~]# 

 

 

2.变量截取的用法

此外,shell还支持字符串的替换

字符变量 含义
${#var} 返回字符串变量var的长度
${var:m} 返回${var}中从第m个字符之后的所有部分
${var:m:len} 返回${var}中从第m个字符之后开始,长度为len的部分
${var#pattern} 删除${var}中开头部分与pattern匹配的部分
${var%pattern} 删除${var}中结尾部分与pattern匹配的部分
   

操作过程如下

[root@localhost ~]# var="shell kubernetes mysql"
[root@localhost ~]# echo ${#var}
22
[root@localhost ~]# echo ${var:3}
ll kubernetes mysql
[root@localhost ~]# echo ${var:3:5}
ll ku
[root@localhost ~]# echo ${var#k}
shell kubernetes mysql
[root@localhost ~]# echo ${var%k}
shell kubernetes mysql

3.字符串替换用法

字符变量 含义
${var/old/new} 用new替换$var中第一次出现的old
${var//old/new} 用new替换$var中所有的old(全局替换)
${var/#old/new} 用new替换${var}中开头部分与old匹配的部分
${var/%old/new} 用new替换${var}中结尾部分与old匹配的部分

  需要注意的是old中可以使用通配符。var可以是@或者*,表示对每个位置参数进行替换

[root@localhost ~]# var="shell kubernetes mysql"
[root@localhost ~]# echo ${var#l}
shell kubernetes mysql
[root@localhost ~]# echo ${var/e/i}
shill kubernetes mysql
[root@localhost ~]# echo ${var//e/i}
shill kubirnitis mysql
[root@localhost ~]# echo ${var/#ee/i}
shell kubernetes mysql
[root@localhost ~]# echo ${var/%ee/i}
shell kubernetes mysql