0

I am trying to make a script that will make a (s)ftp user, but it keeps failing and i don' t know why. If i echo the command its fine, and i can copy and paste it to create the user, but if i execute the command in the bash script it fails to create the user.

The only error i get back is the help section from the useradd command.

Anybody know what i am doing wrong?

#!/bin/bash
# at the top are all the functions  at the bottem is the execution order
username() 
{
echo Enter the username.
read USERNAME
echo 
echo 
echo 

if [ -n "$USERNAME" ]; then
        :
        else
            echo "You didn't supply a username"
            username
         exit 1
fi
echo "the username you have selected is " $USERNAME
read -p "Is this the username you would like to use? Yy/Nn  " yn
case $yn in
    [Yy]* ) echo ;;
    [Nn]* ) username;;
    * ) echo "Please answer yes or no."; username;;
 esac
  }
groups()
{
groeps=($(cat /etc/group | grep ftponly))  #productie
#groeps=($(cat group | grep ftponly))  #local test
read -p "$(
         f=0
        for groepname in "${groeps[@]}" ; do
            # echo "$((++f)): $groepname"
     echo "$((++f)): ${groepname:0:8}"
    done


    echo -ne 'Please select the groep you would like to use > '   
 )" selection

selected_groep="${groeps[$((selection-1))]}"
echo "you have selected " ${selected_groep:0:8}
read -p "is this the right group? Yy/Nn  " yn
case $yn in
[Yy]* ) echo " " ;;
[Nn]* ) groups;;
* ) echo "Please answer yes or no."; groups;;
esac
}

 ticket()
{
echo "Enter the ticket number"
read TICKET
echo 
echo 
if [ -n "$TICKET" ]; then
    :
        else
    echo "you didnt supply a ticket number, to execute this you need to have a ticket number."
    ticket
fi
}
endcommand() 

{
echo  
echo 
DIR=/data/xchangeremote
final="/usr/sbin/useradd -g ${selected_groep:10:4} -c \"$USERNAME + $TICKET\" -d $DIR/./\"$USERNAME\" -s /usr/sbin/nologin \"$USERNAME\""
echo $final
echo "To check if the command is correct see example on: "

read -p "is the command correct now? Answer with: Yy/Nn " yn
    case $yn in
            [Yy]* ) echo ;;
            [Nn]* ) echo "please enter the correct username"; username; groups; ticket; endcommand;; 
            * ) echo "Please answer yes or no."; endcommand;;
     esac
PASSWORD=$(< /dev/urandom tr -dc '1234567890!@#$%qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM' | head -c12; echo "")
echo " the password for this account will be" $PASSWORD 
$final
$USERNAME:$PASSWORD | chpasswd
}
#here are the functions called
username
groups
ticket
endcommand
  • Did you try to run the same command that is printed (final) manually ? – jai_s Oct 24 '16 at 16:40
  • Yeah if i copy the printed (final) command and run it manually it just works fine. that is the weird part.. – Wilde Oct 24 '16 at 16:44
  • you are aware bash has a debug mode? bash -x ./bash-script.sh – mikejonesey Oct 24 '16 at 22:32
0

change;

$final

to;

eval "$final"

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.