一、子字符串截取
1、路径分割:dirname basename
#var1="/etc/httpd/conf/httpd.conf"
#dirname $var1 #输出/etc/httpd/conf/
#basename $var1 #输出httpd.conf
2、expr substr
格式:expr substr $var1 起始位置 截取长度
3、${}字符串截取
格式:${var1:起始位置:截取长度}
4、cut
格式: #echo $var1 | cut -b 起始位置-截止位置
5、实例
#var=sulijinaliwangwang
#echo $var | cut -b 3-7
#echo $var | cut -c 3-7
#expr substr $var 3 5
#echo ${var:3:5} #从第4个字符开始,连续输出5字符
#echo ${var::5} #输出前5个字符(起始位置默认为0)
#echo ${var: -5} #输出后5个字符。如果没有空格,就成了变量值替换
#echo ${var:1} #删除第1个字符,省略了截取长度(窃取长度默认为截取到最后一个字符)
二、子字符串删除
最短匹配与贪婪匹配:
var2=www.sina.com.cn
#echo ${var2#*.} #从头删到第一个点。最短匹配
#echo ${var2##*.} #从头删到最后一个点。贪婪匹配
#echo ${var2%.*} #从后删到最后一个点。最短匹配
#echo ${var2%%.*} #从后删到第一个点。贪婪匹配
#echo ${var2/n/N} #将第一个n替换N。最短匹配
#echo ${var2//n/N} #将所有n替换成N。贪婪匹配
精确匹配:
#echo ${var2#www.} #常用于删除字符串中的起始字符
#echo ${var2/com.} #常用于删除字符串中的中间字符
#echo ${var2%.cn} #常用于删除字符串中的末尾字符
三、变量值替换
方法一:
格式:${变量名-新的变量值}
原则:事先定义了不替换,事先没定义(包含空值)就替换
#unset var3
#echo ${var3-aaa} #var3事先没定义替换成aaa
#var4=444
#echo ${var4-bbb} #var4事先定义了,不替换
#var5= #附空值
#echo ${var5-ccc} #var5事先定义了,不替换
方法二:
格式:${变量名:-新的变量值}
原则:事先定义了(包含空值)就替换,事先没定义不替换
#unset var3
#echo ${var3:-aaa} #var3事先没定义替换成aaa
#var4=444
#echo ${var4:-bbb} #var4事先定义了,不替换
#var5= #附空值
#echo ${var5:-ccc} #var5事先定义了,也替换
以下例子作为了解即可:
#echo ${var6+ddd}
#echo ${var6:+ddd}
#echo ${var6=ddd}
#echo ${var6:=ddd}
#echo ${var6?ddd}
#echo ${var6:?ddd}
四、随机字符串(生成随机码)
#date +%s | sha256sum | base64 | awk NR==1 | cut -c -8
#date +%s | md5sum | base64 | cut -c -8
#head -1 /dev/urandom | md5sum | cut -b 1-8 #获取8个字符
#head -1 /dev/urandom | sha256sum | base64 | awk NR==1 | cut -c 1-16 #获取16个字符