1 字符串截取
1.1 ${} 表达式

格式:${变量名:起始位置:长度}

[root@nsd2309 opt]# echo ${a:1:2}
bc
[root@nsd2309 opt]# echo ${a:0:2}
ab
1.2 RANDOM随机字符的产生
[root@nsd2309 opt]# vim random.sh
#!/bin/bash
a=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
pass=
for i in {1..8}
do
    n=$[RANDOM%62]			#得到0~61随机数存在变量n中
    p=${a:n:1}				#通过截取,将1个随机字符赋值给变量p
    pass+=$p
done
echo $pass

[root@nsd2309 opt]# bash random.sh
g1pEz9mQ
2 字符串的替换
2.1 替换一个字符串

格式:${变量名/变量里的字符/新的字符}

[root@nsd2309 opt]# a=111122223333
[root@nsd2309 opt]# echo ${a/2/g}
1111g2223333
2.1 替换全部字符串

格式:${变量名//变量里的字符/新的字符},这里多了一个/

[root@nsd2309 opt]# a=111122223333
[root@nsd2309 opt]# echo ${a//2/g}
1111gggg3333
3 字符串的匹配删除

以处理系统默认的账户信息为例,定义变量a:

[root@nsd2309 opt]# a=`head -1 /etc/passwd`
[root@nsd2309 opt]# echo $a
root:x:0:0:root:/root:/bin/bash
3.1 从左向右,最短匹配删除

格式:${变量名#*关键词}

删除从左侧第1个字符到最近的关键词“:”的部分,* 作通配符理解:

[root@nsd2309 opt]# echo ${a#*:}
x:0:0:root:/root:/bin/bash
[root@nsd2309 opt]#
3.2 从左向右,最长匹配删除

格式:${变量名##*关键词}

删除从左侧第1个字符到最远的关键词“:”的部分:

[root@nsd2309 opt]# echo ${a##*:}
/bin/bash
[root@nsd2309 opt]#
3.3 从右向左,最短匹配删除

格式:${变量名%关键词*}

删除从右侧最后1个字符到往左最近的关键词“:”的部分,* 做通配符理解:

[root@nsd2309 opt]# echo ${a%:*}
root:x:0:0:root:/root
[root@nsd2309 opt]#
3.4 从右向左,最长匹配删除

格式:${变量名%%关键词*}

删除从右侧最后1个字符到往左最远的关键词“:”的部分:

[root@nsd2309 opt]# echo ${a%%:*}
root
[root@nsd2309 opt]#
4 字符串初值处理

4.1 ${$var:-初始值}

若变量var已存在且非空,则返回 $var 的值;否则返回字串“word”,原变量var的值不受影响。

[root@nsd2309 opt]# xx=1
[root@nsd2309 opt]# echo $xx
1
[root@nsd2309 opt]# echo ${xx:-123}
1
[root@nsd2309 opt]#

设置一个脚本,创建用户和密码,如果用户没有输入密码,则默认密码为123456

[root@nsd2309 opt]# vim pass.sh
#!/bin/bash
read -p "请输入用户名:" user
[ -z $user ] && exit					#如果没有输入用户名,则退出脚本
read -p "请输入密码:" pass
pass=${pass:-123456}					#如果用户没有输入密码,则默认密码为123456
useradd $user
echo "$pass" | passwd --stdin $user


[root@nsd2309 opt]# bash pass.sh
请输入用户名:gggg
请输入密码:
更改用户 gggg 的密码 。
passwd:所有的身份验证令牌已经成功更新。