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

Bash脚本需求:仅输出给定列表中的有效用户ID

解决Bash脚本仅输出有效用户ID的问题

你已经有了不错的起步,但当前脚本有两个核心问题导致输出不符合预期:

  1. id命令的默认输出直接打印到了标准输出,干扰了我们想要的纯净结果
  2. 条件判断逻辑搞反了——你现在是在用户不存在时输出用户名,而我们需要的是用户存在时输出它

下面是修正后的脚本,我会一步步拆解修改点:

#!/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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:54:28