Bash脚本优化求助:用户存在判断及进程显示需求实现
Bash脚本修改方案:用户存在性检查与进程显示逻辑实现
需求回顾
- 用户不存在:返回并显示exit status 1
- 用户存在:
- 该用户有运行进程:仅显示这些进程,最终返回exit status 0
- 该用户无运行进程:仅显示exit status 0
现有脚本问题
现有脚本仅通过grep -c统计用户在/etc/passwd中的行数判断存在性,且echo $?输出的是赋值命令的状态而非实际用户存在性状态,完全未处理进程检查逻辑。
修改后的脚本
#!/bin/bash # 校验是否传入目标用户名参数 if [ $# -eq 0 ]; then echo "请提供要检查的用户名作为参数" exit 1 fi user="$1" # 检查用户是否存在(用id命令更可靠,兼容本地/远程用户) if ! id "$user" &>/dev/null; then echo 1 exit 1 fi # 获取该用户的运行进程ID processes=$(pgrep -u "$user" 2>/dev/null) # 根据进程存在情况输出对应内容 if [ -n "$processes" ]; then echo "$processes" else echo 0 fi # 确保最终返回exit status 0 exit 0
逻辑说明
- 参数校验:先判断是否传入参数,避免无参数运行时的错误
- 用户存在性检查:使用
id命令替代grep /etc/passwd,能更准确判断用户是否存在(包括LDAP等远程用户场景),&>/dev/null屏蔽命令的输出和错误信息,仅利用退出状态判断结果 - 不存在分支处理:用户不存在时直接输出1并以状态码1退出
- 进程检查与输出:
- 用
pgrep -u获取目标用户的所有运行进程ID,2>/dev/null忽略无权限等可能的错误输出 - 若进程列表非空,直接输出进程ID;否则输出0
- 用
- 最终状态:用户存在的场景下,无论是否有进程,最终都以状态码0退出
内容的提问来源于stack exchange,提问作者Simsalabli
相关产品推荐
相关产品推荐

