Check Whether a User Exists

后端 未结 17 1905
清歌不尽
清歌不尽 2020-11-29 17:31

I want to create a script to check whether a user exists. I am using the logic below:

# getent passwd test > /dev/null 2&>1
# echo $?
0
# getent pa         


        
相关标签:
17条回答
  • 2020-11-29 17:35

    I like this nice one line solution

    getent passwd username > /dev/null 2&>1 && echo yes || echo no
    

    and in script:

    #!/bin/bash
    
    if [ "$1" != "" ]; then
            getent passwd $1 > /dev/null 2&>1 && (echo yes; exit 0) || (echo no; exit 2)
    else
            echo "missing username"
            exit -1
    fi
    

    use:

    [mrfish@yoda ~]$ ./u_exists.sh root
    yes
    [mrfish@yoda ~]$ echo $?
    0
    
    [mrfish@yoda ~]$ ./u_exists.sh
    missing username
    [mrfish@yoda ~]$ echo $?
    255
    
    [mrfish@yoda ~]$ ./u_exists.sh aaa
    no
    [mrfish@indegy ~]$ echo $?
    2
    
    0 讨论(0)
  • 2020-11-29 17:39

    You can also check user by id command.

    id -u name gives you the id of that user. if the user doesn't exist, you got command return value ($?)1

    And as other answers pointed out: if all you want is just to check if the user exists, use if with id directly, as if already checks for the exit code. There's no need to fiddle with strings, [, $? or $():

    if id "$1" &>/dev/null; then
        echo 'user found'
    else
        echo 'user not found'
    fi
    

    (no need to use -u as you're discarding the output anyway)

    Also, if you turn this snippet into a function or script, I suggest you also set your exit code appropriately:

    #!/bin/bash
    user_exists(){ id "$1" &>/dev/null; } # silent, it just sets the exit code
    if user_exists "$1"; code=$?; then  # use the function, save the code
        echo 'user found'
    else
        echo 'user not found' >&2  # error messages should go to stderr
    fi
    exit $code  # set the exit code, ultimately the same set by `id`
    
    0 讨论(0)
  • 2020-11-29 17:40

    Script to Check whether Linux user exists or not

    Script To check whether the user exists or not

    #! /bin/bash
    USER_NAME=bakul
    cat /etc/passwd | grep ${USER_NAME} >/dev/null 2>&1
    if [ $? -eq 0 ] ; then
        echo "User Exists"
    else
        echo "User Not Found"
    fi
    
    0 讨论(0)
  • 2020-11-29 17:41

    Create system user some_user if it doesn't exist

    if [[ $(getent passwd some_user) = "" ]]; then
        sudo adduser --no-create-home --force-badname --disabled-login --disabled-password --system some_user
    fi
    
    0 讨论(0)
  • 2020-11-29 17:44

    Below is the script to check the OS distribution and create User if not exists and do nothing if user exists.

    #!/bin/bash
    
    # Detecting OS Ditribution
    if [ -f /etc/os-release ]; then
        . /etc/os-release
        OS=$NAME
    elif type lsb_release >/dev/null 2>&1; then
    OS=$(lsb_release -si)
    elif [ -f /etc/lsb-release ]; then
        . /etc/lsb-release
        OS=$DISTRIB_ID
    else
        OS=$(uname -s)
    fi
    
     echo "$OS"
    
     user=$(cat /etc/passwd | egrep -e ansible | awk -F ":" '{ print $1}')
    
     #Adding User based on The OS Distribution
     if [[ $OS = *"Red Hat"* ]] || [[ $OS = *"Amazon Linux"* ]] || [[ $OS = *"CentOS"*  
    ]] && [[ "$user" != "ansible" ]];then
     sudo useradd ansible
    
    elif [ "$OS" =  Ubuntu ] && [ "$user" != "ansible" ]; then
    sudo adduser --disabled-password --gecos "" ansible
    else
      echo "$user is already exist on $OS"
     exit
    fi
    
    0 讨论(0)
  • 2020-11-29 17:45

    Late answer but finger also shows more information on user

      sudo apt-get finger 
      finger "$username"
    
    0 讨论(0)
提交回复
热议问题