我有一个简单的 shell 脚本来检查用户是否存在,如果不存在,请添加该用户
#!/usr/bin/bash
echo "Enter user"
read -r user
if [ "$(id -u "$user" &>/dev/null)" = 1 ]; then
echo "user existed"
else
useradd "$user"
echo "add password"
passwd "$user"
echo "$user" &>>text.txt
echo "saved"
fi
Run Code Online (Sandbox Code Playgroud)
但它不显示"echo user exist". 相反,它显示如下:
Enter user
abcdef
useradd: user 'abcdef' already exists
add password
New password:
Run Code Online (Sandbox Code Playgroud)
在这种情况下abcdef是现有用户
请让我知道这里出了什么问题,非常感谢。
脚本中的以下条件:
if [ "$(id -u "$user" &>/dev/null)" = 1 ]; then
Run Code Online (Sandbox Code Playgroud)
永远不会是真的。仅当command的输出id -u "$user" &>/dev/null是单个数字 1时才为真,但由于该命令的任何输出都被重定向到/dev/null,这将永远不会发生。
将该行替换为
if { id -u "$user" &>/dev/null ; } then
Run Code Online (Sandbox Code Playgroud)
此条件检查命令的退出状态(而不是像它那样的输出$(...)),如果命令id -u "$user" &>/dev/null 成功(即用户存在)则为真,如果失败(即用户不存在)则为假。