简体   繁体   中英

bash script to add and remove users

I am a beginner in bash scripting and I have created a bash script to add users and remove users on Linux. But since I am facing some issues with the script not really major issues but would be helpful if anyone could point me how to improve the script and the worst practice I am doing the script would be helpful

however the problem I have noticed is that the script takes -a to add a user -d to remove user and -h to get help the -a flag as 2 optional arguments -p for password and -s for shell so the command would be

./useradd.sh -a user -p password -s shell

this works as expected and the user is added to the system but the problem I am facing is that if I do not enter -a flag and specify the -s and -p flag the script is just exited I want to show a clear idea to the user why it exited and there is so many such errors I am assuming but I have not tested it out so much any help would be appreciated, so here is my script

#!/bin/bash

## checking if the user is privileged or not

if [[ $EUID != 0 ]]
then
    echo "Script has to be ran as root or sudo"
    echo "Aborting"
    exit 101
fi

## creating help functions

function usage() {

echo "usage: ${0} -a <user> -p <password> -s <shell> | ${0} -d <user> | ${0} -h" 
    }

function help() {

echo "$0 - Script to add of remove users"
echo "-a - Add a new user"
echo "  -p - Set password while creating user if not mentioned will not set any password by default"
echo "  -s - Set a shell for the user default is /bin/bash if none specified"
echo "-a - Remove a user"
echo "-h - Print this help text"
    }

if [[ "$#" -lt "1" ]]; then
       echo "Argument has to be provided see $0 -h"
fi       

shell=/bin/bash
password=$(openssl rand -base64 32)
while getopts :a:d:h opt; do 
    case $opt in 
    
        a) user=$OPTARG
            while getopts :p:s: test
            do
                case $test in 
                    p) password=$OPTARG;;
                    s) shell=$OPTARG;;
                    /?) echo "The provided flag is not identified see $0 -h"
                        exit;;
                    :) echo "$OPTARG requires arguments see $0 -h"
                        exit;;
                esac
            done
        if [[ "$1" != "-a" ]]
        then
            echo "You have to specify username using -a flag see $0 -h"
        fi
        useradd -m $user -s $shell
        echo "$user":"$password" | chpasswd
        echo "The password for the $user is $password";;
                
        d) userdel -f $OPTARG
            if [[ $? == 0 ]]
            then
                echo "user has been removed"
            else
                echo "There was some error removing the user"
            fi;;

        h) help
            exit;;
        /?) echo "$OPTARG option not valid";;
        :) echo "$OPTARG requires argument";;
    esac
done

Please show your code! I usually process args with case ... in likes :

#!/bin/bash
while [[ $# -gt 0 ]]; do
    case $1 in
        "-a")
            echo "-a is $2"
            shift 2;;
        "-d")
            echo "-d is $2"
            shift 2;;
    esac
done

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM