【问题标题】:Bash check if user exists, if so add number to the usernameBash 检查用户是否存在,如果存在,将数字添加到用户名
【发布时间】:2018-05-05 20:45:55
【问题描述】:

如果存在用户名,我必须在该用户名中添加数字 2,如果该用户名也存在,我必须向其添加数字 3,依此类推... (所以如果 John 存在,则程序必须添加 John2,如果他也存在,则必须添加 John3 等。)我添加的每个用户当然都会被记住。

在 bash 中最短和最简单的方法是什么?

【问题讨论】:

  • 我们的目标是在您的问题中添加一些您自己的代码,以至少显示您为解决这个问题所做的研究工作。
  • @Cyrus 我试过制作一个包含所有名称的文本文件,然后用 grep 检查。但是这种方式有太多的障碍,所以我在这里问。
  • 难道你不知道如何在 bash 中计数,如何找出用户名是否存在,如何构建循环,如何将名称和数字粘合或如何将这些原子操作组合成一个功能/程序?如果用户存在,那么 user0 和 user1 又如何呢?
  • @userunknown 我知道,尽管我对 bash 的了解仍然非常基础。我在这里寻找的是最好的解决方案。如果我根据自己的知识按照自己的方式去做,那将非常混乱。从不添加 User0 和 User1,如果 User 存在,下一个要添加的是 User2,然后是 User3 等等。
  • 所以现在我们有 3 个相互冲突的目标:最短、最简单和最好的解决方案。很少有重叠。最短的通常是相当神秘的。最佳解决方案是非常开放的意见。最简单的取决于您带来的知识。我会说一个好的解决方案是容错的、用户友好的和有据可查的,所以肯定不是最短的解决方案,也不是最简单的。

标签: linux bash linux-mint


【解决方案1】:

假设users.txt 是:

joe
jimmy
foo
jimmy
bar
jimmy

那你就可以用awk了

awk 'cnt[$0]++{$0=$0 cnt[$0]-1} 1' users.txt

产生输出:

joe
jimmy
foo
jimmy1
bar
jimmy2

【讨论】:

    【解决方案2】:

    一些有用的部分:

    for n in "" {9..11}; do egrep -q "^stefan${n}\b" /etc/passwd && echo "name${n} " || echo "unknown name${n}"; done 
    name 
    unknown name9
    unknown name10
    unknown name11
    

    遍历数字,寻找(可能生成的)用户名,在已知或未知时做出不同的反应,粘合名称和数字。

    【讨论】:

      猜你喜欢
      • 2013-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-15
      • 2011-02-20
      相关资源
      最近更新 更多