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
感谢您的帮助!
答案 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会在&&
之后运行命令。