Linux - Newbie This 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.
Are you new to LinuxQuestions.org? Visit the following links:
Site Howto |
Site FAQ |
Sitemap |
Register Now
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.
 |
GNU/Linux Basic Guide
This 255-page guide will provide you with the keys to understand the philosophy of free software, teach you how to use and handle it, and give you the tools required to move easily in the world of GNU/Linux. Many users and administrators will be taking their first steps with this GNU/Linux Basic guide and it will show you how to approach and solve the problems you encounter.
Click Here to receive this Complete Guide absolutely free. |
|
 |
|
08-30-2012, 01:08 AM
|
#16
|
|
Senior Member
Registered: Oct 2005
Distribution: Gentoo, Slackware, LFS
Posts: 2,060
Rep: 
|
This might fix things. I think. Please try.
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 "\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.
|
|
|
|
08-30-2012, 01:21 AM
|
#17
|
|
Senior Member
Registered: Mar 2012
Location: Hungary
Distribution: debian i686 (solaris)
Posts: 2,882
|
you should not put functions inside if.
instead of writing if (root user) then do this you would better write:
if (not root user) print error message and exit.
do the job.
|
|
|
|
08-30-2012, 01:54 AM
|
#18
|
|
Senior Member
Registered: Oct 2005
Distribution: Gentoo, Slackware, LFS
Posts: 2,060
Rep: 
|
Quote:
Originally Posted by pan64
you should not put functions inside if.
|
Do you mean in general?
|
|
|
|
08-30-2012, 02:04 AM
|
#19
|
|
Senior Member
Registered: Mar 2012
Location: Hungary
Distribution: debian i686 (solaris)
Posts: 2,882
|
yes, in general it is not a good practice.
|
|
|
|
08-30-2012, 02:41 AM
|
#20
|
|
Senior Member
Registered: Oct 2005
Distribution: Gentoo, Slackware, LFS
Posts: 2,060
Rep: 
|
Quote:
Originally Posted by pan64
yes, in general it is not a good practice.
|
Oh well I disagree. It depends on the purpose 
What's the general problem that would occur if you do that?
|
|
|
|
08-31-2012, 11:14 AM
|
#21
|
|
Member
Registered: Nov 2011
Posts: 53
Original Poster
Rep: 
|
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'
Code:
yesNo()
{
echo -n "$* (Y/N)? "
read yn
case $yn in
yes|Yes|YES|y|Y)
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
;;
no|No|n|N|NO)
exit
;;
esac
done
}
|
|
|
|
08-31-2012, 11:41 AM
|
#22
|
|
Member
Registered: Nov 2011
Posts: 53
Original Poster
Rep: 
|
I changed thing around and added an if statement
the error I get now is "/usr/sbin/adduser: line 140: syntax error near unexpected token `fi'
/usr/sbin/adduser: line 140: `fi'"
Code:
#Script to add a user to this Linux system
#!/bin/bash
clear
if [ $(id -u) -eq 0 ]; then
function security
{
chown $username:ftp $sourcedir
chmod 775 $sourcedir
}
yesNo()
{
#repeat if yes or no option not valid
while true
do
#$* read ever parameter giving to the yesNo function which will be the message
echo -n "$* (Y/N)? "
#junk holds the extra parameters yn holds the first parameters
read yn junk
#check for difference cases
case $yn in
yes|Yes|YES|y|Y)
return 0
;;
no|No|n|N|NO)
return 1
;;
esac
done
}
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
esac
while true; do
echo -ne "Would you like to create a Secondary ftp account? (y/n):"; read -e confirm
if yesNo
then
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
else
# echo 'You choose not to continue'
exit
fi
fi
|
|
|
|
08-31-2012, 12:37 PM
|
#23
|
|
Guru
Registered: Sep 2009
Location: Perth
Distribution: Manjaro
Posts: 6,386
|
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.
|
|
|
|
08-31-2012, 12:47 PM
|
#24
|
|
Member
Registered: Nov 2011
Posts: 53
Original Poster
Rep: 
|
output with set -xv
Code:
linux-bl9t:~ # adduser
clear
+ clear
if [ $(id -u) -eq 0 ]; then
function security
{
chown $username:ftp $sourcedir
chmod 775 $sourcedir
}
yesNo()
{
#repeat if yes or no option not valid
while true
do
#$* read ever parameter giving to the yesNo function which will be the message
echo -n "$* (Y/N)? "
#junk holds the extra parameters yn holds the first parameters
read yn junk
#check for difference cases
case $yn in
yes|Yes|YES|y|Y)
return 0
;;
no|No|n|N|NO)
return 1
;;
esac
done
}
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
esac
while true; do
echo -ne "Would you like to create a Secondary ftp account? (y/n):"; read -e confirm
if yesNo
then
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
else
# echo 'You choose not to continue'
exit
fi
fi
/usr/sbin/adduser: line 139: syntax error near unexpected token `fi'
/usr/sbin/adduser: line 139: `fi'
|
|
|
|
08-31-2012, 01:28 PM
|
#25
|
|
Member
Registered: Nov 2011
Posts: 53
Original Poster
Rep: 
|
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"
Code:
useridftp=$userid
let useridftp++
|
|
|
|
08-31-2012, 07:54 PM
|
#26
|
|
Senior Member
Registered: Oct 2005
Distribution: Gentoo, Slackware, LFS
Posts: 2,060
Rep: 
|
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).
|
|
|
|
08-31-2012, 08:44 PM
|
#27
|
|
Member
Registered: Nov 2011
Posts: 53
Original Poster
Rep: 
|
I found the problem,
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
|
|
|
|
08-31-2012, 10:03 PM
|
#28
|
|
Senior Member
Registered: Oct 2005
Distribution: Gentoo, Slackware, LFS
Posts: 2,060
Rep: 
|
Perhaps you don't have to place them in a "while true; do ...; done" block?
|
|
|
|
| Thread Tools |
Search this Thread |
|
|
|
Posting Rules
|
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
HTML code is Off
|
|
|
All times are GMT -5. The time now is 12:39 AM.
|
|
LinuxQuestions.org is looking for people interested in writing
Editorials, Articles, Reviews, and more. If you'd like to contribute
content, let us know.
|
Latest Threads
LQ News
|
|