设置用户名指南的 awk 命令

设置用户名指南的 awk 命令

我正在寻找一个 awk 命令,如果从 /etc/passwd 读取的用户名不遵循某些准则,则该命令会打印错误消息。准则是: 该字段必须以字母开头,最多可包含 8 个字母、数字、下划线、连字符和点。我已设法确保用户名不超过 8 个字符,但我在执行命令时遇到困难,这意味着它只能是字母、数字、下划线、连字符和点。

当前代码:

{if (length($1) >= 9) print "Error: The username has too many characters on line " NR}
{if ($1 != [a-z]) print "Error"}  //Here is where I need the command.

我需要多个 if 语句吗?如果是的话你能帮我找到合适的 awk 语句吗

谢谢

答案1

我认为最简单的方法是对用户名的每个条件进行一次测试。这样就可以很容易地看到正在发生的事情,并且很容易修改和扩展。单个正则表达式很快就会变得太笨重。

/^[^a-z]/      { printf("Does not start with a letter:\t%s\n", $0)   }
length > 8     { printf("Longer than 8 characters:\t%s\n", $0)       }
/[^a-z0-9_.-]/ { printf("Contains disallowed characters:\t%s\n", $0) }

这里唯一需要注意的是-上次测试中的破折号 ( )。它必须位于 中的第一个或最后一个[...]

使用来自以下位置的用户名提供 awk 脚本/etc/passwd

$ cut -d ':' -f 1 /etc/passwd | awk -f usernamecheck.awk
Does not start with a letter:   _portmap
Does not start with a letter:   _identd
Does not start with a letter:   _rstatd
Does not start with a letter:   _rusersd
Does not start with a letter:   _fingerd
Does not start with a letter:   _x11
Does not start with a letter:   _switchd
Does not start with a letter:   _traceroute
Longer than 8 characters:       _traceroute

(ETC。)

相关内容