我正在制作一个添加用户,删除用户并更改作为参数($ 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”事情...啊... 无论我做什么,用户始终存在,并且我在此处粘贴的代码是我尝试的最后一个。
你能帮我吗? ^^预先感谢。
答案 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测试)。