Les deux commandes de la boucle while doivent être exécutées en tant qu'utilisateur root. sudo
ou sauvegarder ceci comme un script bash et l'exécuter avec sudo
(probablement préférable).
awk -F ':| ' '{print $1, $2, $3}' users.txt |
while read user password homedir; do
adduser --home "$homedir" "$user"
echo "$password" | passwd "$user" --stdin
done
Par ailleurs, comme vous l'avez souligné, vous pouvez faire plus à l'intérieur. awk
. Nous pouvons faire en sorte qu'il imprime la totalité de la commande :
$ awk -F ':| ' '{ print("adduser --home", $3, $1"; echo", $2 " | passwd", $1) }' users.txt
adduser --home /home/almacen1 Jperez; echo 1234 | passwd Jperez
adduser --home /home/contabilidad1 Lgomez; echo 1234 | passwd Lgomez
adduser --home /home/almacen2 Pfernandez; echo 1234 | passwd Pfernandez
adduser --home /home/direccion1 Mramos; echo 1234 | passwd Mramos
Ensuite, il suffit d'envoyer tout cela dans un Shell (en cours d'exécution) :
$ awk -F ':| ' '{ print("adduser --home", $3, $1"; echo", $2 " | passwd", $1) | "/bin/bash" }' users.txt
adduser: Only root may add a user or group to the system.
passwd: user 'Jperez' does not exist
adduser: Only root may add a user or group to the system.
passwd: user 'Lgomez' does not exist
adduser: Only root may add a user or group to the system.
passwd: user 'Pfernandez' does not exist
adduser: Only root may add a user or group to the system.
passwd: user 'Mramos' does not exist
Il est évident qu'il faut exécuter la procédure ci-dessus avec sudo
(ou en tant que root) pour qu'il puisse fonctionner (c'est pourquoi il vomit des erreurs). Vous pouvez utiliser awk
's system()
mais il faut alors passer plus de temps à concaténer les chaînes. print()
simplifie vraiment les choses, c'est pourquoi j'ai opté pour cette solution.
Pour plus de clarté, je veux dire par là qu'il s'agit d'exécuter sudo awk -F ':| ' '{ print("adduser --home", $3, $1"; echo", $2 " | passwd", $1) | "/bin/bash" }' users.txt