Linux shell脚本:统计非/sbin/nologin用户与最大UID

需积分: 5 0 下载量 150 浏览量 更新于2024-08-05 收藏 14KB DOCX 举报
"第三周作业-正则表达式及shell脚本" 在这份作业中,主要涉及了两个关键知识点:正则表达式和shell脚本。正则表达式是用于匹配字符串模式的一种语言,广泛应用于数据提取、文本搜索和替换等场景。而shell脚本则是Linux或类Unix系统中用于自动化任务的编程工具,通过bash或其他shell环境执行。 1. **正则表达式**: 在这个例子中,`grep -v /sbin/nologin` 使用了正则表达式来筛选 `/etc/passwd` 文件中不包含 `/sbin/nologin` 的行。`grep` 命令是全局正则打印,`-v` 参数表示反向选择,即排除匹配的行。这帮助我们过滤掉了那些使用 `/sbin/nologin` 作为默认shell的用户。 2. **shell脚本**: - `wc -l` 是一个在shell脚本中常用的命令,用于计算输出行的数量。在这里,它被用来计算非 `/sbin/nologin` 用户的数量。 - `cut -d ':' -f 1` 使用 `cut` 命令按指定分隔符(这里是冒号)分割每行,并显示第一部分(即用户名)。 3. **数据处理**: - `sort -t ':' -k 3 -n` 这一行用于按第三列(即UID)进行数值排序。`-t` 指定分隔符,`-k` 指定排序的关键字段,`-n` 表示按照数字进行排序。 - `cut -d ':' -f 1,3,7` 用于选取指定字段,这里选取了第一列(用户名)、第三列(UID)和第七列(shell路径)。 4. **查找最大UID的用户**: 通过排序和选取特定字段,我们可以找到具有最大UID的用户。在这个例子中,`root` 用户的UID为0,这是Linux系统的初始用户,拥有最高的权限。 结合这些操作,我们可以编写一个简单的shell脚本来自动完成上述任务,例如: ```bash #!/bin/bash # 统计非/sbin/nologin用户的数量 count=$(cat /etc/passwd | grep -v /sbin/nologin | wc -l) echo "非/sbin/nologin用户数量: $count" # 显示非/sbin/nologin用户的用户名 echo "非/sbin/nologin用户的用户名:" cat /etc/passwd | grep -v /sbin/nologin | cut -d : -f 1 # 查找并显示最大UID的用户信息 max_uid_user=$(cat /etc/passwd | sort -t : -k 3 -n | tail -n 1 | cut -d : -f 1,3,7) echo "最大UID用户: $max_uid_user" ``` 这个脚本首先计算非 `/sbin/nologin` 用户的总数,然后列出这些用户的用户名,并找出UID最大的用户信息。这展示了shell脚本在处理系统数据时的灵活性和实用性。