Bash:如何检查用户是否存在?
我正在制作一个脚本,用于添加用户、删除用户和更改作为参数传递的用户的密码($1)。我想检查用户是否存在,以便更好地控制它。我知道这个问题已经被问过很多次了,我以前也在谷歌上搜索过,但事实上,这些解决方案对我来说并不适用,我不知道哪一个是我的错误,所以很抱歉 这是我的代码:Bash:如何检查用户是否存在?,bash,shell,Bash,Shell,我正在制作一个脚本,用于添加用户、删除用户和更改作为参数传递的用户的密码($1)。我想检查用户是否存在,以便更好地控制它。我知道这个问题已经被问过很多次了,我以前也在谷歌上搜索过,但事实上,这些解决方案对我来说并不适用,我不知道哪一个是我的错误,所以很抱歉 这是我的代码: #!/bin/bash existe=$(grep -c '^$1:' /etc/passwd) if [ $existe -eq 0 ]; then echo "The user $1 exists" ec
#!/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”解决方案。。。啊。。。
无论我做什么,用户总是存在的,我粘贴在这里的代码是我最后一次尝试的代码
你能帮我吗提前感谢。变量替换需要双引号,并且您的测试条件错误:
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
此外,您可以使用。您也可以使用
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
因此,如果您实际上不需要计数,则无需尝试保存计数并稍后进行检查。命令本身的退出代码将告诉您是否找到了它。您可以使用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进行了测试)。我们不能只使用
$1
而不是^$1:
?@User123从行的开头匹配用户名更安全,:
匹配用户名的结尾,因为passwd文件格式是这样的。哦,我想$1
可以是:username/uid等等。,如果只传递用户名,那么就可以了:)好吧,这是公平的,在这种情况下,可以使用\b$1\b
,作为整体匹配,但我认为这不是一个好主意,id
更合适。是的,实际上。这可能会产生误导。通过使用不包含输入的固定布尔输出,我们可以避免不可预见的副作用