1
#!/bin/bash

counter=2

while [ $counter -lt 19 ]
do



        username= head -n $counter ./user_sheet.csv | tail -n 1 | cut -d ';' -f1 
        psswd= head -n $counter ./user_sheet.csv | tail -n 1 | cut -d ';' -f2 
        full_name= head -n $counter ./user_sheet.csv | tail -n 1 | cut -d ';' -f3 
        group= head -n $counter ./user_sheet.csv | tail -n 1 | cut -d ';' -f4 
        second_group= head -n $counter ./user_sheet.csv | tail -n 1 | cut -d ';' -f5 

        sudo useradd $username -m -g $group -s /bin/bash -c $full_name

        if [ second_group = LPGestionnaires ]
        then 
                usermod -a -G $second_group $user
        fi

        #echo "$username:$psswd" | chpasswd

        ((counter++))
done
echo Execution complete

The part where it says sudo useradd $username -m -g $group -s /bin/bash -c $full_name is the part that isn't working, my -g option isn't seeing the variable $group argument as an argument, when I execute my script it returns this: useradd: group '-s' does not exist

I'm pulling the data from a .csv file that is located correctly.

If anyone could help that would be great!

Thanks!

wjandrea
  • 14,109
  • 4
  • 48
  • 98
moltenmath
  • 23
  • 5

2 Answers2

5

It seems you wanted to assign the result of the head ... command to the variable username here:

username= head -n $counter ./user_sheet.csv | tail -n 1 | cut -d ';' -f1 

That is incorrect syntax. Correct it like this:

username=$(head -n $counter ./user_sheet.csv | tail -n 1 | cut -d ';' -f1)

And then do the same for the other variables too, which all have the same problem.

Also, change the sudo useradd command like this:

sudo useradd "$username" -m -g "$group" -s /bin/bash -c "$full_name"

Variables used in command line arguments should usually be double-quoted to avoid word splitting.

janos
  • 4,848
  • 23
  • 50
0

The final code is this for anyone that is curious:

#!/bin/bash

counter=2

while [ $counter -lt 19 ]
do



        username=$(head -n $counter ./user_sheet.csv | tail -n 1 | cut -d ';' -f1)
        psswd=$(head -n $counter ./user_sheet.csv | tail -n 1 | cut -d ';' -f2)
        full_name=$(head -n $counter ./user_sheet.csv | tail -n 1 | cut -d ';' -f3)
        group=$(head -n $counter ./user_sheet.csv | tail -n 1 | cut -d ';' -f4)
        second_group=$(head -n $counter ./user_sheet.csv | tail -n 1 | cut -d ';' -f5)

        sudo useradd "$username" -m -g "$group" -s /bin/bash -c "$full_name"

        if [ "$second_group" = LPGestionnaires ]
        then 
                sudo usermod -a -G LPGestionnaires "$username"
        fi

        echo "$username:$psswd" | sudo chpasswd

        ((counter++))
done
echo Execution complete
moltenmath
  • 23
  • 5
  • 3
    You're *almost* re-inventing the `newusers` command here - at the very least, your script could be made somewhat neater by using a `while` loop (something like `while IFS=';' read -r username passwd full_name group second_group; do stuff; done < ./user_sheet.csv`) – steeldriver Dec 17 '18 at 01:03
  • 4
    @steeldriver I was just going to say something similar. For getting lines 2-19, I would use a sed command: `done < <(sed -n '2,19 p' ./user_sheet.csv)` – wjandrea Dec 17 '18 at 01:06
  • @steeldriver my teacher wanted us to write the entire thing so I couldn't use a premade 'newuser' however you are right that it could have been a lot cleaner and that I'm repeating a lot of things – moltenmath Dec 17 '18 at 23:53