shell script at bottom of script - what am I missing
Linux - NewbieThis Linux forum is for members that are new to Linux.
Just starting out and have a question?
If it is not in the man pages or the how-to's this is the place!
Notices
Welcome to LinuxQuestions.org, a friendly and active Linux Community.
You are currently viewing LQ as a guest. By joining our community you will have the ability to post topics, receive our newsletter, use the advanced search, subscribe to threads and access many other special features. Registration is quick, simple and absolutely free. Join our community today!
Note that registered members see fewer ads, and ContentLink is completely disabled once you log in.
If you have any problems with the registration process or your account login, please contact us. If you need to reset your password, click here.
Having a problem logging in? Please visit this page to clear all LQ-related cookies.
Get a virtual cloud desktop with the Linux distro that you want in less than five minutes with Shells! With over 10 pre-installed distros to choose from, the worry-free installation life is here! Whether you are a digital nomad or just looking for flexibility, Shells can put your Linux machine on the device that you want to use.
Exclusive for LQ members, get up to 45% off per month. Click here for more info.
#!/bin/bash
#Script to add a user to this Linux system
clear
if [ $(id -u) -eq 0 ]; then
function security {
chown $username:ftp $sourcedir
chmod 775 $sourcedir
}
function userinfo {
read -p "Enter User Name : " username
while [ -z $username ]|| egrep "^$username" /etc/passwd 1>/dev/null; do
echo -ne "Either user exists or you entered a blank, enter username again: ";read -e username
done
echo -ne "Enter your password: ";read -s password
while [ -z $password ]; do
echo -ne "\nEnter your password again: ";read -s -e password
done
echo -ne "\nPlease Enter your User ID Number: "; read -ern5 uid
while [[ ! $uid =~ ^[0-9]+$ ]]||egrep $uid /etc/passwd >/dev/null; do
echo -ne "Please re-enter your uid positive intergers only: ";read -ern5 uid
done
read -p "Enter a Comment : " comment
read -p "Enter Users Source Directory : " sourcedir
while [ ! -d "$sourcedir" ]; do
echo -ne "\n$sourcedir Directory Not Found! Please re-enter: "; read sourcedir
done
pass=$(perl -e 'print crypt($ARGV[0], "password")' $password) # passing the password entered
}
function shellsel {
echo ""
echo "Select the type of shell you will be using"
echo ""
echo -e "1) Bash Shell - SFTP Secure\n" # Shell selection statement
echo -e "2) False Shell - FTP Unsecure\n"
echo -ne "Enter choice: ";read shell;
case "$shell" in
1)
shell=/bin/bash # case statment for shell selection.
commentstatic="Internal SFTP Account"
useradd -u $uid -p $pass -c "$comment $commentstatic" -d /forms/$username"sa" -s $shell $username
echo -e "Copying System Files ...."
cd /nas_ftp5/Customer/Troy/T_Skel
cp -Rp `ls` $sourcedir
echo -e "Finished Copying System Files ..."
tail -1 /etc/passwd > $sourcedir/etc/passwd
echo "$username" >> /etc/ftpusers
echo -e "$username" '\t' "$sourcedir" >> /etc/security/chroot.conf
;;
2)
shell=/bin/false
commentstatic="Internal FTP Account"
useradd -u $uid -p $pass -c "$comment $commentstatic" -d /forms/$username"sa" -s $shell $username
echo -e "$username" '\t' "$sourcedir" >> /etc/security/chroot.conf
;;
esac
}
echo -ne "\nIndividual Account or Environment Account\n\n"
echo -e "1) Individual Account\n"
echo -e "2) Environment Account\n"
echo -ne "Enter choice: "; read acctchoice;
case "$acctchoice" in
1)
userinfo
shellsel
security
;;
2)
userinfo
shellsel
cd /forms
ln -s $sourcedir /forms/${username}sa
security
while true; do
echo -ne "Would you like to create a Secondary ftp account? (y/n):"; read -e confirm
case $confirm in
[Yy]* )
echo -ne "\nEnter ftp directory: ";read -e ftpdir
while [ ! -d "$ftpdir" ]; do
echo -ne "\n$ftpdir Directory Not Found! Please re-enter: "; read ftpdir
done
usernameftp=${username}ftp
useridftp=$userid
let $useridftp++
commentstatic2="Internal Secondary FTP Account"
shellftp=`egrep $username /etc/passwd | cut -d: -f7`
useradd -u $useridftp -c "$comment $commentstatic2" -d $ftpdir -s $shellftp $usernameftp
egrep $usernameftp /etc/passwd >> /etc/ftpusers
echo -e "$usernameftp" '\t' "$ftpdir" >> /etc/security/chroot.conf
egrep $usernameftp /etc/passwd >> $ftpdir/etc/passwd
;;
[Nn]* )
exit
;;
esac
done
;;
esac
fi
Note: I wonder if you had to add space between the patterns and ')' within case statements e.g. '[Yy]* )' and '[Nn]* )'. Also please consider possible IFS-based variable expansion within unquoted variables. e.g. 'case $var in' and '[ $(...) ... ]'.
Last edited by konsolebox; 08-30-2012 at 01:13 AM.
this code errors out at the done line at the bottom, why?
usr/sbin/adduser: line 42: syntax error near unexpected token `done'
/usr/sbin/adduser: line 42: ` done'
Maybe if you indented to your script you might be able to see where your errors are? Also, if the #! is not the first line the script will not work.
And as has been mentioned several times, set -xv would show you the execution of the script and where your errors may be coming from.
in the code it seems not to be grabbing the userid it sees it as "1" in stead of applying or adding 1 to the previous userid, error message "useridftp=$userid"
I no longer follow where this goes. As grail suggested it's best if you properly indent your code. This is helpful so that you would easily see which part of your code makes a error with respect to syntax. When posting the code, it would also be easy for others to read it. Also, as I've said, you should close your open variables around double quotes (those that could be expanded with IFS).
I was calling the wrong variable, but now I have a new problem when asked
"echo -ne "Would you like to create a Secondary ftp account? (y/n):"; read -e confirm", it works just fine but when finished it ask the same question again it doesn't exit when done, what do I do about that?
Code:
#!/bin/bash
#Script to add a user to this Linux system
clear
if [ $(id -u) -eq 0 ]; then
function security {
chown $username:ftp $sourcedir
chmod 775 $sourcedir
}
function userinfo {
read -p "Enter User Name : " username
while [ -z $username ]|| egrep "^$username" /etc/passwd 1>/dev/null; do
echo -ne "Either user exists or you entered a blank, enter username again: ";read -e username
done
echo -ne "Enter your password: ";read -s password
while [ -z $password ]; do
echo -ne "\nEnter your password again: ";read -s -e password
done
echo -ne "\nPlease Enter your User ID Number: "; read -ern5 uid
while [[ ! $uid =~ ^[0-9]+$ ]]||egrep $uid /etc/passwd >/dev/null; do
echo -ne "Please re-enter your uid positive intergers only: ";read -ern5 uid
done
read -p "Enter a Comment : " comment
read -p "Enter Users Source Directory : " sourcedir
while [ ! -d "$sourcedir" ]; do
echo -ne "\n$sourcedir Directory Not Found! Please re-enter: "; read sourcedir
done
pass=$(perl -e 'print crypt($ARGV[0], "password")' $password) # passing the password entered
}
function shellsel {
echo ""
echo "Select the type of shell you will be using"
echo ""
echo -e "1) Bash Shell - SFTP Secure\n" # Shell selection statement
echo -e "2) False Shell - FTP Unsecure\n"
echo -ne "Enter choice: ";read shell;
case "$shell" in
1)
shell=/bin/bash # case statment for shell selection.
commentstatic="Internal SFTP Account"
useradd -u $uid -p $pass -c "$comment $commentstatic" -d /forms/$username"sa" -s $shell $username
echo -e "Copying System Files ...."
cd /nas_ftp5/Customer/Troy/T_Skel
cp -Rp `ls` $sourcedir
echo -e "Finished Copying System Files ..."
tail -1 /etc/passwd > $sourcedir/etc/passwd
echo "$username" >> /etc/ftpusers
echo -e "$username" '\t' "$sourcedir" >> /etc/security/chroot.conf
;;
2)
shell=/bin/false
commentstatic="Internal FTP Account"
useradd -u $uid -p $pass -c "$comment $commentstatic" -d /forms/$username"sa" -s $shell $username
echo -e "$username" '\t' "$sourcedir" >> /etc/security/chroot.conf
;;
esac
}
echo -ne "\nIndividual Account or Environment Account\n\n"
echo -e "1) Individual Account\n"
echo -e "2) Environment Account\n"
echo -ne "Enter choice: "; read acctchoice;
case "$acctchoice" in
1)
userinfo
shellsel
security
;;
2)
userinfo
shellsel
cd /forms
ln -s $sourcedir /forms/${username}sa
security
while true; do
echo -ne "Would you like to create a Secondary ftp account? (y/n):"; read -e confirm
case $confirm in
[Yy]* )
echo -ne "Enter your password: ";read -s passwordftp
while [ -z $password ]; do
echo -ne "\nEnter your password again: ";read -s -e passwordftp echo -ne "\nEnter ftp directory: ";read -e ftpdir
done
passftp=$(perl -e 'print crypt($ARGV[0], "passwordftp")' $passwordftp) # passing the password entered
echo -ne "\nEnter ftp directory: ";read -e ftpdir
while [ ! -d "$ftpdir" ]; do
echo -ne "\n$ftpdir Directory Not Found! Please re-enter: "; read ftpdir
done
usernameftp=${username}ftp
useridftp=$uid
let useridftp++
commentstatic2="Internal Secondary FTP Account"
shellftp=`egrep $username /etc/passwd | cut -d: -f7`
useradd -u $useridftp -p $passftp -c "$comment $commentstatic2" -d $ftpdir -s $shellftp $usernameftp
egrep $usernameftp /etc/passwd | cut -d: -f1 >> /etc/ftpusers
echo -e "$usernameftp" '\t' "$ftpdir" >> /etc/security/chroot.conf
egrep $usernameftp /etc/passwd >> $ftpdir/etc/passwd
;;
[Nn]* )
exit
;;
esac
done
;;
esac
fi
LinuxQuestions.org is looking for people interested in writing
Editorials, Articles, Reviews, and more. If you'd like to contribute
content, let us know.