Shell中字符串截取、替换和删除(非sed/awk方式)


1, 字符串截取

${变量名称:截取位置:截取长度}
a=abcdefg
echo ${a:5:2} //从变量的第6位截取,截取2位
echo ${a:3:3} //从变量的第4位截取,截取3位
echo ${a:0:3} //从变量的第1位截取,截取3位
echo ${a::3} //上述的精简写法

编写脚本,可以生成8位随机字符
#!/bin/bash
x=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
for i in {1..8} //循环8次
do
n=$[RANDOM%62] //得到0~61随机数存在变量n中
k=${x:n:1} //使用字符串截取得到1个随机字符,存在变量k中
a=$k$a //不断往变量a中追加
done
echo $a //喊出最终结果,是一个8位长度的随机字符,可以用作密码

 

2, 字符串替换


${变量名称/旧/新}
[root@svr7 opt]# a=12345
[root@svr7 opt]# echo ${a/4/6}
12365
[root@svr7 opt]# a=1122334455
[root@svr7 opt]# echo ${a/4/6}
1122336455
[root@svr7 opt]# echo ${a//4/6} //替换所有!
1122336655

 

3, 字符串删除


${变量名称#要删除的内容}  即从左往右删除   (掐头)
${变量名称%要删除的内容}  即从右往左删除  (去尾)
a=abcdefghijkl //定义变量作为素材
echo ${a#abcdefghij} //从左往右删除,只留下kl
echo ${a#*j} //精简写法,效果同上
echo ${a#def} //无法从中间删除
a=abcdefghijkl
echo ${a%defghijkl} //从右往左删除,只留下abc
echo ${a%d*} //精简写法,效果同上

a=abcdabcd
echo ${a#*c} //从左往右删除到第1个c
echo ${a##*c} //从左往右删除到最后1个c
a=abcdabcd
echo ${a%c*} //从右往左删除到第1个c
echo ${a%%c*} //从右往左删除到最后1个c

 

4,定义变量初值(备用值)

    ${变量名:-初值}

#!/bin/bash

read -p '请输入用户名:' u
[ -z $u ] && echo "创建用户前必须输入用户名!" && exit
useradd $u
stty -echo
read -p '请输入密码(默认123456):' p
stty echo
echo ${p:-123456} | passwd --stdin $u


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM