Shell变量中截取字符串
一、说明
本文讲解在变量中处理字符串的部分语句,格式化变量值的输出
二、字符串截取的方式:
- ${变量名:起始位置:长度}
1)仅截取前两个字符,其他字符删除
[root@server ~]# a="abcde" [root@server ~]# echo ${a:0:2} ab
其中“0”代表从哪个字符标识位截取,“2”代表截取的字符串个数
第一个字符标识位为0,后续为1、2、3、4
2)从第2个字符开始,截取3个字符
[root@server ~]# a="abcde" [root@server ~]# echo ${a:1:3} bcd
三、字符串替换的两种用法
- 只替换第一个匹配结果:${变量名/old/new}
- 替换全部匹配结果:${变量名//old/new}
区别是替换全部使用连续的2个“/”
1)替换第一个字符
[root@server ~]# echo $a abcdec [root@server ~]# echo ${a/c/3} ab3dec
2)替换全部字符
[root@server ~]# echo $a abcdec [root@server ~]# echo ${a//c/3} ab3de3
四、字符串最短和最长匹配
- 从左向右,最短匹配删除:${变量名#*关键词}
-即遇到第一个关键词进行匹配,删除自关键词往左字符串
- 从左向右,最长匹配删除:${变量名##*关键词}
-即遇到最后一个关键词进行匹配,删除自关键词往左字符串
- 从右向左,最短匹配删除:${变量名%关键词*}
-即遇到第一个关键词进行匹配,删除自关键词往右的字符串
- 从右向左,最长匹配删除:${变量名%%关键词*}
-即遇到最后一个关键词进行匹配,删除自关键词往右的字符串
1)匹配第一个‘:’之后的内容
[root@server ~]# echo $a root:x:0:0:root:/root:/bin/bash [root@server ~]# echo ${a#*:} x:0:0:root:/root:/bin/bash
2)匹配最后一个‘:’之后的内容
[root@server ~]# echo $a root:x:0:0:root:/root:/bin/bash [root@server ~]# echo ${a##*:} /bin/bash
3)匹配最后一个‘:’之前的内容
[root@server ~]# echo $a root:x:0:0:root:/root:/bin/bash [root@server ~]# echo ${a%:*} root:x:0:0:root:/root
4)匹配第一个‘:’之前的内容
[root@server ~]# echo $a root:x:0:0:root:/root:/bin/bash [root@server ~]# echo ${a%%:*} root
五、变量的初始值(缺省值)
- ${var:-word}
“:-”是固定写法,var代表变量,word代表初始值
测试创建用户,设置密码
[root@server ~]# cat test.sh #!/bin/bash read -p "请输入账号:" user [ -z $user ] && exit ##如果没有输入用户名,则脚本自动退出 read -p "请输入密码:" pass pass=${pass:-abcdef} ##如果没有输入密码,则缺省密码为abcdef echo "$user" echo "$pass"