2017-08-11 8 views
2

Ich schreibe Bash-Skript, in dem es nach bestimmten Verzeichnis fragt und macht es während der Ausführung von Skript. Dann fragt es mich nach der Anzahl der Personen und geht in die Schleife. Ich möchte, dass es dann eine Textdatei mit Verzeichnis und Name der eingegebenen Person erstellt.Ausführen mehrerer Benutzereingaben Bash

Wenn es darum geht, eine Datei mit Touch zu erstellen, funktioniert es nicht.

Fehle ich etwas.

echo "Please enter directory\n"  
read -p directory  
mkdir -p $directory/name  

echo "Please enter number of persons\n"  
read -p number  

for ((i = 0; i <= number; i++))  

do  
    echo "Please enter person $i :\n"  
    read -p person  
    touch $directory$person.txt  

done 
+0

Können Sie [Frage bearbeiten] (https://stackoverflow.com/posts/45631651/edit) hervorheben, was das eigentliche Problem ist? Was funktioniert nicht für dich? – arco444

+0

Es ist unklar, was Sie fragen. – janos

+0

Ich habe bearbeitet, um das Problem hervorzuheben. – Mike

Antwort

0

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