如何为重复生成的用户名自动添加递增序号(+1)
解决用户名重复自动递增的Bash脚本问题
我有一个Bash脚本,功能是读取用户的姓名生成用户名并写入
Print.txt文件,但现在需要实现当出现重复用户名时,自动查询已有记录并添加递增序号。比如同名前缀的用户,第一个是DNASH,第二个是DNASH1,第三个是DNASH2这样。我尝试用while循环和grep -q但没成功,求解决方案。
完整解决方案脚本
#!/bin/bash # 读取用户姓名输入 echo "Enter your First Name: "; read first echo "Enter your Last Name: "; read last # 生成基础用户名:名首字母 + 姓前4个字母,统一转为大写(匹配示例格式) base_user=$(echo "${first:0:1}${last:0:4}" | tr '[:lower:]' '[:upper:]') # 统计Print.txt中已有的同名前缀记录数(文件不存在时默认0) count=$(grep -c "^$base_user" Print.txt 2>/dev/null) # 生成最终用户名:无重复用基础名,有重复则追加统计数作为序号 if [ $count -eq 0 ]; then final_user="$base_user" else final_user="${base_user}${count}" fi # 输出结果并写入文件 echo "Your Username is: $final_user" echo "$final_user:$first:$last" >> Print.txt
关键逻辑解释
- 统一用户名格式:用
tr '[:lower:]' '[:upper:]'把生成的基础用户名转为大写,和你给出的示例(DNASH、DNASH1)格式一致。 - 精准统计重复记录:
grep -c "^$base_user" Print.txt中的^是正则匹配开头,确保只统计以基础用户名为前缀的完整用户名(避免比如DNASH10被误算到DNASH的统计里);2>/dev/null用来忽略文件不存在时的报错,此时count会默认是0,不影响逻辑。 - 自动生成序号:统计到的
count就是当前已存在的同名前缀用户数量,直接作为后缀即可——第一个用户时count=0,用基础名;第二个用户时count=1,生成DNASH1,完全符合你的需求。
测试示例
比如依次输入:
- first name: daniel,last name: nash → 用户名
DNASH,写入文件 - first name: donna,last name: nash → 统计到已有1条
DNASH开头的记录,生成DNASH1 - first name: donald,last name: nash → 统计到已有2条记录,生成
DNASH2
完全和你给出的示例效果一致。
内容的提问来源于stack exchange,提问作者Mnai
相关产品推荐
相关产品推荐

