bash脚本–数据类型
一、整型
定义:declare -i varName=value
二、字符串型
bash脚本中变量类型默认按字符串处理此处不做说明。
字符串处理:
1、切片
${varName:offset:number} #偏移offset个字符向后取number个字符
例:str=abcabc #后文均使用该变量演示
echo ${str:1:3} #输出bca
${varName:offset} #偏移offset个字符取至末端
例:echo ${str:2} #输出cabc
${varName: -number} #取末端number个字符
例:echo ${str: -2} #输出bc,冒号后必须跟空格
2、按模式匹配取子串
${varName#*word} #从左至右匹配,删除第一次匹配到word字符及之前的所有字符
例:echo ${str#*b} #输出cabc
${varName##*word} #从左至右匹配,删除最后一次匹配到word(字符)及之前的所有字符
例:echo ${str##*b} #输出c
${varName%word*} #从右至左匹配,删除第一次匹配到word字符及之前的所有字符
例:echo ${str%b*} #输出abca
${varName%%word*} #从右至左匹配,删除最后一次匹配到word字符及之前的所有字符
例:echo ${str%%b*} #输出a
3、查找替换
${varName/pattern/substi} #查找变量中第一次匹配到的pattern字符串替换为substi
例: echo ${str/bc/d} #输出adabc
${varName//pattern/substi} #查找变量中所有匹配到的pattern字符串替换为substi
例: echo ${str//bc/d} #输出adad
${varName/#pattern/substi} #查找行首被pattern匹配的内容替换为substi
例:echo ${str/#ab/dd} #输出ddcabc
${varName/%pattern/substi} #查找行尾被pattern匹配的内容替换为substi
例:echo ${str/%bc/dd} #输出abcadd
注:删除则为不指定substi,如echo ${str//ab},输出cc。
4、其他
${varName:-value} #如果varName为空则返回value,并不会修改变量本身,输出的value是命令执行结果
${varName:=value} #如果varName为空,则返回value并赋值给varName,不为空则返回其本省值,等同于varName=${varName:-value}
${varName:+value} #如果varName为空不做处理,不为空则返回value,varName本身不变
${varName:?errorInfo} #varName如果为空则返回errorInfo,并会输出到错误输出中,不为空则返回其原值
${varName^^} #将字符串中的小写字母转为大写字母
${varName,,} #将字符串中的大写字母转为小写字母
三、数组
定义:declare -a arrayName
1、赋值
arrayName[IDX]=value #单个元素赋值
arrayName=([IDX]=value [IDX]=value) #部分元素赋值
arrayName=(value1 value2 value3) #所有元素完全赋值
2、引用
${arrayName[IDX]} #引用单个元素,不指定下标则表示引用第0个元素
${arrayName[@]} #引用所有元素,也可用${arrayNanme[*]}
${#arrayName[@]} #返回数组元素个数,也可用${#arrayName[*]}
3、切片
${arrayName[@]:offset:number} #偏移offset个元素(从下标为offset的元素开始),共number个
4、撤销、追加元素
arrayName[${#arrayName[@]}]=value #在数组最后追加一个元素并赋值
unset arrayName[IDX] #撤销某个元素,不会将其后面的元素下标向前推进1,但是在使用${#arrName[@]}时,数组元素个数会减1,即变为稀疏数组