bash – 检查用户是否存在

我想创建一个脚本来检查用户是否存在。我使用的逻辑如下:
# getent passwd test > /dev/null 2&>1
# echo $?
0
# getent passwd test1 > /dev/null 2&>1
# echo $?
2

所以如果用户存在,那么我们有成功,否则用户不存在。我已经把上面的命令在bash脚本如下:

#!/bin/bash

getent passwd $1 > /dev/null 2&>1

if [ $? -eq 0 ]; then
    echo "yes the user exists"
else
    echo "No,the user does not exist"
fi

现在,我的脚本总是说用户存在,无论什么:

# sh passwd.sh test
yes the user exists
# sh passwd.sh test1
yes the user exists
# sh passwd.sh test2
yes the user exists

为什么上述条件总是评估为TRUE并且说用户存在?

我在哪里错了?

更新:

阅读所有的答复后,我发现我的脚本中的问题。问题是我重定向getent输出的方式。所以我删除所有的重定向东西,并使得getent线看起来像这样:

getent passwd $user  > /dev/null

现在我的脚本工作正常。

你可以改变shebang到#!/ bin / bash -vx来调试?

也,尝试下面的方法…

ret=false
getent passwd $1 >/dev/null 2>&1 && ret=true

if $ret; then
    echo "yes the user exists"
else
    echo "No,the user does not exist"
fi

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...