Ihr Skript hat mehrere Probleme.
Zunächst einmal lesen Sie die Benutzereingaben nicht richtig. Die Option -p
des Befehls read
wird verwendet, um einen Text bereitzustellen, der als Eingabeaufforderung dient und die Ausgabevariable nicht angibt. Die Ausgabevariable wird als Positionsargument angegeben. So können Sie zum Beispiel Benutzereingaben in die Variable directory
ohne eine Texteingabeaufforderung lesen (dann benötigen Sie wahrscheinlich vorher echo
): read directory
; oder Sie können die Aufforderung ausdrucken und so lesen: read -p "Directory: " directory
.
Zweitens iteriert Ihre Schleife number+1
mal, von 0
bis number
, inklusive. Sie möchten wahrscheinlich, dass es von 1
zu number
geht.
Schließlich ist der Name der Ausgabedatei touch
nicht unbedingt die Datei innerhalb der , aber es könnte eine Datei in Ihrem aktuellen Arbeitsverzeichnis sein. Wenn der Benutzer beispielsweise somedir
für directory
und name
für person
eingibt, erstellen Sie eine Datei mit dem Namen somedirname.txt
. Daher ist es am besten, einen Schrägstrich zwischen einen Verzeichnisnamen und einen Dateinamen zu setzen.
Mit dieser fixiert ist, Ihr Skript wie folgt aussieht:
#!/bin/bash
read -p "Please enter directory: " directory
mkdir -p "$directory/name"
read -p "Please enter number of persons: " number
for ((i = 1; i <= number; i++)); do
read -p "Please enter person $i: " person
touch "$directory/name/$person.txt"
done
es zum Beispiel wie der Lauf:
$ bash script
Please enter directory: /tmp
Please enter number of persons: 3
Please enter person 1: Huey
Please enter person 2: Dewey
Please enter person 3: Louie
wird ein Verzeichnis /tmp/name
und Dateien darin erstellen:
$ find /tmp/name
/tmp/name
/tmp/name/Huey.txt
/tmp/name/Dewey.txt
/tmp/name/Louie.txt
Können Sie [Frage bearbeiten] (https://stackoverflow.com/posts/45631651/edit) hervorheben, was das eigentliche Problem ist? Was funktioniert nicht für dich? – arco444
Es ist unklar, was Sie fragen. – janos
Ich habe bearbeitet, um das Problem hervorzuheben. – Mike