for-schleife User erstellen

Rubyurek

Commander
Registriert
Sep. 2017
Beiträge
2.552
Ich versuche momentan mit der "for-schleife" ein Verzeichnis zu erstellen und in dem Verzeichnis mehrere User zu erstellen. Jedoch erstellt er mir die U1-U10 direkt im Homeverzeichnis und nicht im testfiles ordner. Was mache ich da nur falsch?

Code:
mkdir /$HOME/testfiles

for file in /~/testfiles; do

        touch U_1
        touch U_2
        touch U_3
        touch U_4
        touch U_5
        touch U_6
        touch U_7
        touch U_8
        touch U_9
        touch U_10

done
 
Das Skript macht genau das, was du ihm sagst. Gibts du keinen absoluten Pfad an, geht die Shell natürlich von deinem aktuellen Verzeichnis aus. Den Sinn hinter deinem Skript verstehe ich allerdings nicht... Du legst ein neues Verzeichnis an, das natürlich leer ist und lässt dann eine Schleife laufen, die für jede Datei in dem angelegten Verzeichnis immer wieder die zehn selben Dateien an derselben Stelle erzeugt!? Dabei benutzt du den Schleifenzähler "file" nichtmal...
 
/${HOME}/testfiles und ~/testfiles (ohne vorangegangenes "/") können sich auf zwei verschiedene Verzeichnisse beziehen.

Ansonsten hilft "/bin/bash -x", um Dir eine schrittweise Abarbeitung mit Rückmeldung anzuzeigen.

Noch dazu ist die Variable "file" erst einmal leer, Du musst sie noch mit Inhalt füllen. Das machst Du aber mit der Angabe "/~/testfiles" nicht. Das funktioniert so nicht. Was genau hast Du vor?
Ergänzung ()

Code:
for USER in U_1 U_2 U_3 U_4; do
   touch ~/testfiles/${USER}
done
Ergänzung ()

"touch" erzeugt Dir übrigens nur eine leere Datei, keinen user...
 
Zuletzt bearbeitet:
sorry die user sollen im grunde leere dateien sein^^
Ergänzung ()

Twostone schrieb:
Was genau hast Du vor?

Wie gesagt. Verzeichnis soll im HOME erstellt werden. Im Verzeichnis "testfiles" sollen die leeren Dateien erstellt werden U1 bis U10.

Mit deinem Code ploppt bei mir dieser Fehler aus:

Code:
[LIST]
[*]for USER in U_1 U_2 U_3 U_4 U_5 U_6 U_7 U_8 U_9 U_10
[*]touch /home/linux/testfiles/U_1
[/LIST]
touch: '/home/linux/testfiles/U_1' kann nicht berührt werden: Datei oder Verzeichnis nicht gefunden
[LIST]
[*]for USER in U_1 U_2 U_3 U_4 U_5 U_6 U_7 U_8 U_9 U_10
[*]touch /home/linux/testfiles/U_2
[/LIST]
touch: '/home/linux/testfiles/U_2' kann nicht berührt werden: Datei oder Verzeichnis nicht gefunden
[LIST]
[*]for USER in U_1 U_2 U_3 U_4 U_5 U_6 U_7 U_8 U_9 U_10
[*]touch /home/linux/testfiles/U_3
[/LIST]
touch: '/home/linux/testfiles/U_3' kann nicht berührt werden: Datei oder Verzeichnis nicht gefunden
[LIST]
[*]for USER in U_1 U_2 U_3 U_4 U_5 U_6 U_7 U_8 U_9 U_10
[*]touch /home/linux/testfiles/U_4
[/LIST]
touch: '/home/linux/testfiles/U_4' kann nicht berührt werden: Datei oder Verzeichnis nicht gefunden
[LIST]
[*]for USER in U_1 U_2 U_3 U_4 U_5 U_6 U_7 U_8 U_9 U_10
[*]touch /home/linux/testfiles/U_5
[/LIST]
touch: '/home/linux/testfiles/U_5' kann nicht berührt werden: Datei oder Verzeichnis nicht gefunden
[LIST]
[*]for USER in U_1 U_2 U_3 U_4 U_5 U_6 U_7 U_8 U_9 U_10
[*]touch /home/linux/testfiles/U_6
[/LIST]
touch: '/home/linux/testfiles/U_6' kann nicht berührt werden: Datei oder Verzeichnis nicht gefunden
[LIST]
[*]for USER in U_1 U_2 U_3 U_4 U_5 U_6 U_7 U_8 U_9 U_10
[*]touch /home/linux/testfiles/U_7
[/LIST]
touch: '/home/linux/testfiles/U_7' kann nicht berührt werden: Datei oder Verzeichnis nicht gefunden
[LIST]
[*]for USER in U_1 U_2 U_3 U_4 U_5 U_6 U_7 U_8 U_9 U_10
[*]touch /home/linux/testfiles/U_8
[/LIST]
touch: '/home/linux/testfiles/U_8' kann nicht berührt werden: Datei oder Verzeichnis nicht gefunden
[LIST]
[*]for USER in U_1 U_2 U_3 U_4 U_5 U_6 U_7 U_8 U_9 U_10
[*]touch /home/linux/testfiles/U_9
[/LIST]
touch: '/home/linux/testfiles/U_9' kann nicht berührt werden: Datei oder Verzeichnis nicht gefunden
[LIST]
[*]for USER in U_1 U_2 U_3 U_4 U_5 U_6 U_7 U_8 U_9 U_10
[*]touch /home/linux/testfiles/U_10
[/LIST]
touch: '/home/linux/testfiles/U_10' kann nicht berührt werden: Datei oder Verzeichnis nicht gefunden
 
Zuletzt bearbeitet:
Okay, Erläuterung:

Direkt hinter dem FOR folgt die Variable, die die Schleife ablaufen soll, wie z.B. eine Auflistung wie [U_1 U_2 U_3 U_4] oder die Ausgabe eines Befehles wie etwa $(seq 0 6).

Man könnte auch, willst Du die Bezeichnung so beibehalten, die Schleife wie folgt gestalten:

Code:
#!/bin/bash
for USER in $(seq 1 10); do
   touch ~/testfiles/u_${USER}
done
Ergänzung ()

Sekorhex schrieb:
Mit deinem Code ploppt bei mir dieser Fehler aus:

Exdistiert denn das Verzeichnis ~/testfiles schon?
 
Twostone schrieb:
Okay, Erläuterung:

Direkt hinter dem FOR folgt die Variable, die die Schleife ablaufen soll, wie z.B. eine Auflistung wie [U_1 U_2 U_3 U_4] oder die Ausgabe eines Befehles wie etwa $(seq 0 6).

Man könnte auch, willst Du die Bezeichnung so beibehalten, die Schleife wie folgt gestalten:

Code:
#!/bin/bash
for USER in $(seq 1 10); do
   touch ~/testfiles/u_${USER}
done
Ergänzung ()



Exdistiert denn das Verzeichnis ~/testfiles schon?

Nein dies soll erstellt werden. Ich hätte vor dem code wohlmöglich mkdir ~/testfiles gemacht.
Ergänzung ()

Der fertige Code ist da (der funktioniert jetzt auch):

Code:
mkdir ~/testfiles                       #Ordner "testfiles" wird erstellt
   for i in $(seq 1 10); do             #
   touch ~/testfiles/$USER${i}          #Erstellt "$USER1-10" im Ordner
done                                    #Exit
 
Zuletzt bearbeitet:
Vielleicht solltest Du dann einfach eine Abfrage mit einbauen à la

Code:
[[ ! -d ~/testfiles ]] && mkdir ~/testfiles

Erläuterung:
Der Teil "[[ ! -d ~/testfiles ]]" startet eine Abfrage, ob das Verzeichnis ~/testfiles nicht existiert (das "!" vor dem "-d" negiert die Abfrage nach regulärem Verzeichnis), das "&&" sorgt dafür, daß nach erfolgreichem Beenden des vorangegangenen Befehls (Aussage wahr bzw. exitcode 0) der nachfolgende Befehl ("mkdir ~/testfiiles") ausgeführt wird.


Herzlichen Glückwunsch zum erfolgreichen Shell-Script.
 
  • Gefällt mir
Reaktionen: Rubyurek
RalphS schrieb:
Nicht $USER überschreiben. Das ist eine interne Systemvariable.

Ich weiss deshalb habe ich $USER genommen und eine andere variable^^
 
Zurück
Oben