Bash:如何检查用户是否存在?

时间:2018-11-20 11:19:08

标签: bash shell

我正在制作一个添加用户,删除用户并更改作为参数($ 1)传递的用户密码的脚本。我想检查用户是否存在,以便可以更好地控制它。我知道这个问题已经问过很多次了,之前我一直在搜索这个问题,但是实际上,这些解决方案对我而言不起作用,我不知道这是我的错误,非常抱歉。

这是我的代码:

#!/bin/bash
existe=$(grep -c '^$1:' /etc/passwd)

if [ $existe -eq 0 ]; then
    echo "The user $1 exists"
    echo ""
else
    echo "The user $1 does not exist"
    echo ""
fi

我尝试了“> / dev / null”解决方案,“ getent”事情...啊... 无论我做什么,用户始终存在,并且我在此处粘贴的代码是我尝试的最后一个。

你能帮我吗? ^^预先感谢。

3 个答案:

答案 0 :(得分:2)

您需要双引号来替换变量,并且您的测试条件是错误的:

exists=$(grep -c "^$1:" /etc/passwd)

if [ $exists -eq 0 ]; then
    echo "The user $1 does not exist"
else
    echo "The user $1 exists"
fi

此外,您可以使用id(1)

答案 1 :(得分:0)

您也可以为此使用grep的返回值:

if grep -q "^$1:" /etc/passwd; then
    printf 'The user %s exists\n' "$1"
else
    printf 'The user %s does not exist\n' "$1"
fi

,或者也许更好,使用getent

if getent passwd "$1" >/dev/null; then
    printf 'The user %s exists\n' "$1"
else
    printf 'The user %s does not exist\n' "$1"
fi

因此,如果您实际上不需要计数,则无需尝试保存计数并在以后进行检查。命令本身的退出代码将告诉您是否找到了它。

答案 2 :(得分:0)

您可以使用grep充当条件

#!/bin/sh
grep -q "^$1:" /etc/passwd && echo exists || echo FALSE

或者如果您喜欢命令式的条件语句

#!/bin/sh
if grep -q "^$1:" /etc/passwd ;then
    echo exists
else
    echo FALSE
fi

(均通过bash和dash测试)。