1.${ } 变量、截取、替换
${ } 通常是获取变量的值,但也可以进一步对变量的值进行”加工”处理,例如:字符串的截取,替换
1.1 获取变量值
${}获取变量的值,下面例子,定义了变量a,值test
[root@zxp1 /opt/script]# a=test
[root@zxp1 /opt/script]# echo $a //可以省略{}
test
[root@zxp1 /opt/script]# echo ${a}
test
[root@zxp1 /opt/script]# echo $ab //这种情况会造成字段不能识别,字段边界模糊的问题
[root@zxp1 /opt/script]# echo ${a}b //通过{}可以清晰表示字段名称的边界
testb
1.2 字符串截取
获取变量值只是它的基本功能,
{}获取变量值只是它的基本功能,
获取变量值只是它的基本功能,{}内部还支持变量替换,变量截取,先看看基本语法
通过删除不需要的部分子串来截取
#是去掉左边(键盘上#在 $ 的左边)
%是去掉右边(键盘上% 在$ 的右边)
单一符号#,%是最小匹配;两个符号##,%%是最大匹配
这种语法,我自己给他取个名字,“砍头去尾” 语法,这个用法通常会搭配通配符 ’ * ’ 来使用。
为什么叫砍头去尾呢?看下下面例子
如下,定义变量path=/etc/sysconfig/network
[root@zxp1 ~]# path=/etc/sysconfig/network
[root@zxp1 ~]# echo ${path#*/} //去掉path变量左边 第一次出现 */ 子串 *代表匹配任意0或0个以上字符
etc/sysconfig/network
[root@zxp1 ~]# echo ${path#tc} //像这样是匹配不成功的,第一个字符‘t’ 与 左边第一个字符‘/’没匹配上,直接就结束了
/etc/sysconfig/network
[root@zxp1 ~]# echo ${path##*/} //最大匹配
network
[root@zxp1 ~]# echo ${path%/*} //去掉path变量右边匹配的子串
/etc/sysconfig
[root@zxp1 ~]# echo ${path%%/*}
[root@zxp1 ~]#
通过字符坐标获取
第一个 “:” 后面数字代表字符开始的位置,第二个 “:”后面数字代表要获取子串的长度
[root@zxp1 ~]# echo ${path:0:5}
/etc/
[root@zxp1 ~]# echo ${path:3:7}
c/sysco
1.3 字符替换
[root@zxp1 ~]# echo ${path/et/op} //第一个出现的et替换成op
/opc/sysconfig/network
[root@zxp1 ~]# echo ${path//et/op} //所有出现的et替换成op
/opc/sysconfig/nopwork
2. ``与$() 命令替换
``和$() 内部通常是一个shell命令,在执行脚本之前,会先执行这个命令,相当于函数调用
[root@zxp1 ~]# echo date //直接当成字符串输出
date
[root@zxp1 ~]# echo `date` //相当于函数调用,先执行date命令
Tue Sep 3 16:10:43 CST 2019
[root@zxp1 ~]# echo $(date) //作用与上面的命令一样,但不是所有版本的linux系统都支持
Tue Sep 3 16:11:45 CST 2019
3.$(())与expr 整数运算
[root@zxp1 ~]# echo $((3+2))
5
[root@zxp1 ~]# echo $((3*2))
6
[root@zxp1 ~]# echo `expr 2+3` //运算符前后需要空格
2+3
[root@zxp1 ~]# echo `expr 2 + 3`
5
[root@zxp1 ~]# echo `expr 2 * 3` //会提示语法错误,需要转义
expr: syntax error
[root@zxp1 ~]# echo `expr 2 \* 3`
6
版权声明:本文为qq_24393347原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。