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
 
    