You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

逻辑说明

  1. 参数校验:先判断是否传入参数,避免无参数运行时的错误
  2. 用户存在性检查:使用id命令替代grep /etc/passwd,能更准确判断用户是否存在(包括LDAP等远程用户场景),&>/dev/null屏蔽命令的输出和错误信息,仅利用退出状态判断结果
  3. 不存在分支处理:用户不存在时直接输出1并以状态码1退出
  4. 进程检查与输出:
    • 用pgrep -u获取目标用户的所有运行进程ID,2>/dev/null忽略无权限等可能的错误输出
    • 若进程列表非空,直接输出进程ID;否则输出0
  5. 最终状态:用户存在的场景下,无论是否有进程,最终都以状态码0退出

内容的提问来源于stack exchange,提问作者Simsalabli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 09:54:24