仅回显有效用户

时间:2018-03-23 19:13:48

标签: linux bash shell

Bash新手问题:我想让这个脚本只回显给定列表中有效用户ID的用户,而不回显无效用户ID。

这是我到目前为止所拥有的:

#!/bin/bash

while IFS= read -r line
    do
        id "$line"

        if [ $? -eq 1 ] ; then

        echo $line

        else

        echo "$line is not valid user ID" >&2
fi
    done < "$1"

相反,它反映了'id'的结果以及文本“是无效的用户ID”

uid=17931(wwirls) gid=100000(all_usr) groups=100000(all_usr),12(everyone),62(netaccounts),701(1)
wwirls is not valid CruzID
id: smak: no such user
smak

理想情况下,它会产生如下结果:

wwirls
otheruserid
admin

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

id "$line" &> /dev/null

可能是最小的改变,可以做你想要的。这表示将id的输出(包括任何错误消息)发送到位桶(/dev/null)。但是,您的测试结果是倒退 - $?成功时为0,失败时为1

现在,if会自动查看$?。所以你可以缩短到:

if id "$line" &> /dev/null    # Find out if the user exists, without printing anything
then
    echo "$line"              # The user exists (`id` succeeded)
else
    echo "$line is not valid user ID" >&2     # No such user
fi

修改2 如果您不需要not valid输出,则可以用

替换整个if .. fi
id "$line" &> /dev/null && echo "$line"

如果&&之前的命令成功,bash会在&&之后运行命令。