1、计算表达式
1.1、基础知识
1.1.1、需求
我们需要在 shell 内部对数据进行普通的数据计算操作
 
1.1.2、基本语法
方法1:数据运算
$((数据计算))
注意:数据计算表达式不受空格限制
方法2:本身计算
let 变量名=数据计算
注意:数据计算表达式必须在一起,不允许有空格
方法3:数据运算
expr 数据计算
注意:计算的结果不会交给一个值,也不支持变量
 
1.2、实践
1.2.1、$(())实践
# echo $((5+1))
6
# a=5
# echo $((a+1))
6
 
1.2.2、let实践
1.2.3、expr实践
# expr 3 + 4
7
# expr $a + 1
10
# a=10
# b=20
# val=`expr $a + $b`
# echo $val
30
 
2、字符串基本操作
2.1、需求
2.2、语法
方法1: ${#String}
方法2: expr length "$String"
方法3: echo $String |awk '{print length}'
 
2.3、实践
2.3.1、获取字符串长度
# a=charsetstring
# echo ${#a}
13
# expr length "$a"
13
# echo "$a" | awk '{print length}'
13
 
2.3.2、截取字符串内容
# 语法
${string:偏移量:截取长度}
注意:偏移量 指的是列表的索引值,即默认第一个字符的索引值是0,截取长度 表示要截取的字符串长度,如果为负值,表示反向截取。
# echo $a
charsetstring
# echo ${a:3:5}
rsets
# echo ${a:1:-1} 获取2~最后位置的元素
harsetstrin
# echo ${a:2} 获取2~最后位置的元素
arsetstring
# echo ${a::-2} 从首位到倒数第二位
charsetstri
 
2.3.3、转换操作【大小写转换】
# 语法
${string^^} 全部转换成大写
${string,,} 全部转换成小写
# c=SetCharsetString
# echo ${c^^}
SETCHARSETSTRING
# echo ${c,,}
setcharsetstring
 
2.4、字符串进阶
2.4.1、常见语法
${string#字符串}      删除string内部头部存在匹配的字符串的话,删除头部的字符
${string##字符串正则} 贪婪模式,删除string内部所有匹配到的信息
${string%字符串}     删除string内部尾部存在匹配的字符串的话,删除头部的字符
${string%%字符串正则} 贪婪模式,删除string内部所有匹配到的信息
${string/字符串正则}  删除首次匹配到的内容
${string//字符串正则} 删除全部匹配到的内容
${string/#字符串正则} 删除匹配到的头部内容,等同于 ${string#字符串}
${string/%字符串正则} 删除匹配到的尾部内容,等同于 ${string%字符串}
 
2.4.2、删除头部信息
# b=setcharsetstring
# echo $b
setcharsetstring
# echo ${b#char}
setcharsetstring
# echo ${b##s*t} 
ring
 
2.4.3、删除尾部信息
# echo $b
setcharsetstring
# echo ${b%ring}
setcharsetst
# echo ${b%r*g} 
setcharsetst
 
2.4.4、删除操作
# 删除开头的set
# echo ${b/set}
charsetstring
# 删除所有的set
# echo ${b//set}
charstring
# 删除开头的set
# echo ${b/#set}
charsetstring
# 删除最尾的ing
# echo ${b/%ing}
setcharsetstr
 
2.4.5、替换操作
# 语法
${string/正则表达式/替换内容}  将正则表达式 第一次 匹配到的信息替换成指定的信息
${string//正则表达式/替换内容} 将正则表达式 全部 匹配到的信息替换成指定的信息
# 示例
# echo $b
setcharsetstring
# 替换首次
# echo ${b/set/SET}
SETcharsetstring
# 替换所有的
# echo ${b//set/SET}
SETcharSETstring
 
2.4.6、赋值操作
需求:在编写脚本的时候,我们需要进行对某些变量进行 临时性 或 即时性 的赋值操作,从而满足对应的需求。
# 语法
${string:-value}: 如果变量string为空或者未设置,则返回value的值;否则返回string自己的值。
${string:=value}: 如果变量string为空或者未设置,则将value的值交给string;否则返回string自己的值。
${string:+value}: 如果变量string有内容,则返回value的值。
${string:?value}: 如果变量string为空或者未设置,则返回value的值到标准错误输出 strout。
# :- 实践
# echo $a
charsetstring
# echo ${a:-666}
charsetstring
# a=""
# echo ${a:-666}
666
# echo ${a}
空
# := 实践
# echo ${aa}
# echo ${aa:=666}
666
# echo ${aa}
666
# echo ${aa:=777}
666
# :+ 实践
# echo ${aa}
666
# echo ${aa:+888}
888
# aa=""
# echo ${aa:+888}
# :? 实践
# aa=""
# echo ${aa:+888}
# echo ${aa:?'error'}
-bash: aa: error
# aa="aaa"
# echo ${aa:?'error'}
aaa