Bash脚本需求:仅输出给定列表中的有效用户ID
解决Bash脚本仅输出有效用户ID的问题
你已经有了不错的起步,但当前脚本有两个核心问题导致输出不符合预期:
id命令的默认输出直接打印到了标准输出,干扰了我们想要的纯净结果- 条件判断逻辑搞反了——你现在是在用户不存在时输出用户名,而我们需要的是用户存在时输出它
下面是修正后的脚本,我会一步步拆解修改点:
#!/bin/bash while IFS= read -r line do # 执行id命令,但屏蔽所有输出(标准输出+错误输出),只保留命令的退出状态 id "$line" >/dev/null 2>&1 # 当id命令执行成功(退出状态为0),说明是有效用户,输出用户名 if [ $? -eq 0 ] ; then echo "$line" else # 可选:如果需要记录无效用户,把提示输出到stderr,不会干扰有效用户的标准输出列表 echo "$line is not a valid user ID" >&2 fi done < "$1"
关键修改说明:
id "$line" >/dev/null 2>&1:把id命令的标准输出(>/dev/null)和错误输出(2>&1)都重定向到空设备,彻底屏蔽id自带的输出信息- 反转条件判断:仅当
id命令成功(用户存在)时才输出用户名,完美匹配你想要的理想输出 - 错误提示定向到
stderr:如果不需要记录无效用户,直接删掉else块即可,这样标准输出只会保留有效用户ID
测试效果
假设你的输入列表包含wwirls(有效)、smak(无效)、admin(有效),运行脚本后标准输出会是:
wwirls admin
错误提示会单独出现在终端的错误流中,不会混入有效用户列表。
内容的提问来源于stack exchange,提问作者Dan
相关产品推荐
相关产品推荐

