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