Reputation: 1
line=0
cat userDetails.csv |while IFS="," read -r last first grps
do
line=$((line+1))
if [ $line == 1 ]; then
continue
fi
first=echo "$first"|tr 'A-Z' 'a-z'
last=echo "$last"|tr 'A-Z' 'a-z'
grps=echo "$grps"
for groupName in echo $grps
do
ret=getent group $groupName
if [ -z $ret ]
then
groupadd $groupName
fi
done
passwd=cat /dev/urandom | tr -dc 'a-zA-Z0-9'|head -c10
user1=echo "$last"|tail -c6
user2=echo "$first"|head -c2
grps=echo "$grps"
if [ ! -z $grps]
then
useradd -G $grps $user1$user2 -p $password
else
useradd $user1$user2 -p $password
fi
echo “user id for $first is: $user1$user2, password: $password”
done
This is the code that is reading the CSV file and creating the password, when I run it against the csv File that looks a little like
Smith, John
Doe, Jane
etc.. And the errors coming out are this
./adduser3.sh: line 9: John: command not found
./adduser3.sh: line 10: Smith: command not found
./adduser3.sh: line 11: : command not found
./adduser3.sh: line 14: group: command not found
groupadd: group 'echo' already exists
./adduser3.sh: line 20: /dev/urandom: Permission denied
./adduser3.sh: line 21: Smith: command not found
./adduser3.sh: line 22: John: command not found
./adduser3.sh: line 23: : command not found
useradd: option requires an argument -- 'p'
Usage: useradd [options] LOGIN
useradd -D
useradd -D [options]
Options:
-b, --base-dir BASE_DIR base directory for the home directory of the
new account
-c, --comment COMMENT GECOS field of the new account
-d, --home-dir HOME_DIR home directory of the new account
-D, --defaults print or change default useradd configuration
-e, --expiredate EXPIRE_DATE expiration date of the new account
-f, --inactive INACTIVE password inactivity period of the new account
-g, --gid GROUP name or ID of the primary group of the new
account
-G, --groups GROUPS list of supplementary groups of the new
account
-h, --help display this help message and exit
-k, --skel SKEL_DIR use this alternative skeleton directory
-K, --key KEY=VALUE override /etc/login.defs defaults
-l, --no-log-init do not add the user to the lastlog and
faillog databases
-m, --create-home create the user's home directory
-M, --no-create-home do not create the user's home directory
-N, --no-user-group do not create a group with the same name as
the user
-o, --non-unique allow to create users with duplicate
(non-unique) UID
-p, --password PASSWORD encrypted password of the new account
-r, --system create a system account
-R, --root CHROOT_DIR directory to chroot into
-s, --shell SHELL login shell of the new account
-u, --uid UID user ID of the new account
-U, --user-group create a group with the same name as the user
-Z, --selinux-user SEUSER use a specific SEUSER for the SELinux user mapping
--extrausers Use the extra users database
I cannot figure as to why the dev/urandom permission is messing up with the cat and why it is spitting out the errors it is giving me
Upvotes: 0
Views: 212
Reputation: 198456
The first problem is first=echo "$first"
not doing what you think.
To define a variable, you need var=val
, with no spaces in val
(or you need to quote it). There is also var=val command
syntax, where var
is defined in a sub-environment created to run command
(i.e. temporarily, just for command
sake). This is what your command does: first it expands $first
to John
, then you have the command first=echo John
, which defines a variable first
with value echo
for the duration of the command John
. And as the error informs you, there is no command John
.
The correct syntax would be first=$(echo $first)
, which runs the command echo $first
and assigns its value to first
. Or first="$first"
, which just assigns the value of first
to first
. Which makes it very obvious that you are doing something completely unnecessary in the first
place.
The rest of the code is peppered with the same kind of error, using echo
unnecessarily, wrongly, or both, or failing to quote properly. You should also make sure to indent your code correctly in the future, both for the benefit of the potential answerers, and also for your own sanity when debugging.
Upvotes: 1