* BASH *“不是有效的标识符”和“语法错误:EOF”

时间:2016-05-04 13:24:19

标签: bash

以下代码用于使用bash脚本创建用户配置文件(顺便说一下,我是一个完整的初学者),我无法弄清楚我的代码的问题。当使用read -p进行输入时,我收到错误“不是有效的标识符”。我也遇到了结束文件的问题,因为我收到错误“语法错误:意外的文件结束”。

read -p "Please enter a username : " username
read -p "Please enter a password : " password
egrep "^$username" /etc/passwd >/dev/null
if [ $? == 0 ]; then
    echo "$username already exists!"
    exit 1
else
    pass=$(perl -e 'print crypt($ARGV[0], "password")' $password)
    useradd -m -p $pass $password
    [ $? == 0 ] && echo "User had been succesfully created and added to system group" || echo "Failed to create and add user to system group"
    exit 2
fi

谢谢!

1 个答案:

答案 0 :(得分:0)

一些注意事项:

  1. 请务必添加hashbang
  2. 使用-q标志来禁止egrep
  3. 的输出
  4. 评论(以及手册页)建议用crypt加密密码可能不是一个好主意。而是使用系统passwd为用户添加密码
  5. useradd关于-p标志的手册页:

      

    注意:建议不要使用此选项,因为密码(或   列出流程的用户将可以看到加密密码。

         

    您应确保密码符合系统密码   政策。

    我认为您的主要问题是将未加密的密码作为useradd命令的用户名传递,以下内容有效:

    #!/bin/bash
    read -r -p "Please enter a username : " username
    egrep -q "^$username" /etc/passwd
    if [[ $? -eq 0 ]]; then
        printf "\n%s already exists!\n" "$username"
        exit 1
    else
        useradd -m "$username" && passwd "$username"
        if [ $? == 0 ]; then
            printf "\nUser had been succesfully created and added to system group\n"
        else
            printf "\nFailed to create and add user to system group\n"
            exit 2
        fi
    fi