2017-02-03 7 views
0

Problem: Ich muss eine Datei erstellen, in der Benutzer und Kennwörter gespeichert sind. Aber mein Skript speichert nur das Passwort von user1.Mein Skript funktioniert nicht richtig

Ich erkläre mich besser mit einem Beispiel. Wenn die zwei Benutzer mit einem zufälligen Kennwort erstellt werden, weist das Skript beiden Benutzern dasselbe Kennwort zu.

user1: Eehei5oo8ohz:/home/user1:/bin/bash

user2: Eehei5oo8ohz:/home/user2:/bin/bash

Wann sollte das Ergebnis meiner Skript sein so etwas wie dieses:

user1: Eehei5oo8ohz:/home/user1:/bin/bash

user2: Kln2149sdpja:/home/user2:/b in/bash

My script: Dies ist das Skript die ich verwendet habe:

#!/bin/bash 
##Checking if you are root.## 
if [ `id -u` -ne 0 ] 
then 
    echo "you dont are a root user." 
    exit 1 
fi 

x=`pwgen 12 1` 

for i in {1..2} 
do 
    echo "user$i:@:/home/user$i:/bin/bash" >> users.txt 
done 

for j in $x 
do 
    sed -i "s/@/$j/" users.txt 
done 


newusers users.txt 

users=`cat users.txt` 
login=`echo $i | cut -d: -f1` #username 
pass=`cat pass.txt | tr " " _` 
password1=`echo $i | cut -d: -f2` #password 

for in $users 
do 
     echo "$login:$password1" | chpasswd -m 
done 

rm users.txt 
rm pass.txt 

ich hoffe ich habe erklärt, richtig und schätzen alle Hilfe.

+1

'sed -i" s/x/$ i/"Benutzer.txt' ersetzt alle' x' Zeichen, nicht nur die erste. Anstatt das 'x' nachher zu ersetzen, erzeuge und addiere einfach das Passwort beim ersten Mal. –

+0

Sie können Ihr Skript verbessern. Warum erstellen Sie nicht das Passwort und den Benutzereintrag in derselben Iteration in der ersten Schleife? – Jdamian

+0

@Jdamian Danke für Ihre Hilfe aber , Wie bekomme ich es nicht den gleichen Schlüssel wiederholen ?. Ich habe den Post mit meinem neuen Code bearbeitet – Randomuser1204281

Antwort

0

Sie können dieses Skript vereinfachen, indem sie von sed Bearbeitung loszuwerden, zB Änderung:

for i in {1..2} 
do 
    echo "user$i:@:/home/user$i:/bin/bash" >> users.txt 
done 

for j in $x 
do 
    sed -i "s/@/$j/" users.txt 
done 

zu

pass=`cat pass.txt` 
    i=1 
    for pw in $pass 
    do 
      echo "user$i:$pw:/home/user$i:/bin/bash" >> users.txt 
      ((i++)) 
    done 

Auf diese Weise können Benutzer Nummern und Passwörter in einem Rutsch bekommen und Sie werden garantiert um so viele Benutzernamen wie Passwörter zu erhalten.

+0

Vielen Dank. Funktioniert perfekt :) – Randomuser1204281

1

Sie könnten Ihr Skript vereinfachen und anzupassen, wie folgt (ich beziehe mich auf den ersten Teil nur):

#!/bin/bash 
    # checking if you are root.## 
    if [ `id -u` -ne 0 ] 
    then 
     echo "you are not the root user!" 
     exit 1 
    fi 

    for i in {1..2} 
    do 
     x=`pwgen 12 1` 
     echo "user$i:$x:/home/user$i:/bin/bash" >> users.txt 
    done 

Diese eine Datei users.txt wie das schaffen Gebrüll:

user1:ohng3uxohYi9:/home/user1:/bin/bash 
user2:Gah5kiehaemi:/home/user2:/bin/bash 

Ich sehe keinen Sinn darin, eine Datei mit Benutzern zu erstellen und dann das @ -Zeichen durch ein generiertes Passwort zu ersetzen, da Sie das von Anfang an tun können!

Verwandte Themen