Shell中的字符串处理
  yh3Abo8H5Uxn 2023年11月19日 11 0
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:所有的身份验证令牌已经成功更新。




【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月19日 0

暂无评论

推荐阅读
  bYdMetjCLs2g   2023年11月28日   16   0   0 bash
  wwLZeziuqjLR   2023年12月08日   66   0   0 Dockercentosbash
  mjtHZIki74si   2023年12月06日   21   0   0 ubuntubash
  hHWnOnebRjW2   2023年11月27日   19   0   0 PostgreSQLsqlbash
  vxoexqgjyiCS   2023年11月25日   13   0   0 linuxbash数组