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 
3
  • Did you try to run the same command that is printed (final) manually ? Commented Oct 24, 2016 at 16:40
  • Yeah if i copy the printed (final) command and run it manually it just works fine. that is the weird part.. Commented Oct 24, 2016 at 16:44
  • you are aware bash has a debug mode? bash -x ./bash-script.sh Commented Oct 24, 2016 at 22:32

1 Answer 1

0

change;

$final 

to;

eval "$final" 

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.