Bash 如果don';不存在

Bash 如果don';不存在,bash,if-statement,Bash,If Statement,我正在尝试创建一个shell脚本,请求用户输入。如果用户存在,它会让您知道;如果用户不存在,它将创建用户和密码并将其添加到组中。然而,我被困住了,希望有人能帮助我。它似乎在读取响应后停止,并且不执行if/then 以下是我到目前为止的情况: #!/bin/bash echo "Which user would you like to use docker? " read -r user getent passwd "$user" > /dev/n

我正在尝试创建一个shell脚本,请求用户输入。如果用户存在,它会让您知道;如果用户不存在,它将创建用户和密码并将其添加到组中。然而,我被困住了,希望有人能帮助我。它似乎在读取响应后停止,并且不执行if/then

以下是我到目前为止的情况:

#!/bin/bash

echo "Which user would you like to use docker? "
read -r user

getent passwd "$user" > /dev/null 2&>1 && echo yes || echo no
read -r response

if [ "$response" == "yes" ];then
        echo " User already exist"
if [ "$response" == "no" ];then
        useradd -m $user
        passwd $user
        usermod -aG docker $user
fi
fi

使用随机密码或设置如下所示的密码,我猜passwd命令是这里的问题,因为在您的示例中,它需要响应:

#!/bin/bash

group="docker"
password1="$(strings /dev/urandom | grep -o '[[:alnum:]]' | head -n 8 | tr -d '\n';echo)"

read -p "Which user would you like to use docker: " user
grep -q ${user} /etc/passwd 

# If grep command was true, we know user exist
if [[ "$?" = "0" ]];then
    echo "${user} already exist"
else
    # We can use 'read -p' instead of using echo + read
    read -p "Add a password for ${user}: " password

    # We can use -m and -G in same line
    useradd -m ${user} -G ${group}

    # Use read -p for set a password or use password1 for a random pass
    chpasswd <<< ${user}:${password}

    # Another way to add password without passwd
    # echo ${user}:${password} | chpasswd

    # Let us know user was added in group docker and with a password
    echo "Successfully added ${user}/${group} and password has been set to ${password}......."

fi
#/bin/bash
group=“docker”
password1=“$(strings/dev/uradom | grep-o'[:alnum:]'| head-n8 | tr-d'\n';echo)”
阅读-p“您希望使用哪个用户docker:”用户
grep-q${user}/etc/passwd
#若grep命令为true,我们就知道用户存在
如果[[“$?”=“0”];然后
回显“${user}已存在”
其他的
#我们可以使用'read-p'代替echo+read
阅读-p“为${user}添加密码:”password
#我们可以在同一行中使用-m和-G
useradd-m${user}-G${group}
#使用read-p设置密码,或使用password1进行随机传递

chpasswd您不需要输出
yes
no
if
语句可以测试
getent
的退出状态,就像
&
一样

echo "Which user would you like to use docker? "
IFS= read -r user

if getent passwd "$user" > /dev/null 2>&1; then
    echo "User already exists"
else
    useradd -m "$user" &&
    passwd "$user" &&
    usermod -aG docker "$user"
fi

请首先在粘贴脚本,然后尝试实现那里提出的建议。我做到了。因此,我在这里发布更多帮助的原因。我是一个bashshell脚本noob。
2&>1
创建一个名为
1
的文件。我建议使用
2>&1
将stderr重定向到stdout。它指定用于字段拆分的字符。在这种情况下,将其设置为null将保留输入中可能出现的任何前导或尾随空格。这可能是您想要放弃它的地方,但是考虑到仍然有很多方法可以输入无效的用户名,最好使用它,除非您有充分的理由不这样做。