2017-02-18 5 views
3

Ich muss eine Reihe von Ordnern mit dem gleichen Namen, aber mit einer Nummer am Ende erstellen.Erstellen Sie gleichzeitig Ordner in Bash

Benutzer sollte eine Nummer schreiben und das Skript sollte diese Anzahl von Ordnern erstellen. Ich weiß nicht, wie man die Nummer und die Anzahl der Ordner verbindet.

Hier ist mein Skript

#!/bin/bash 
echo "(1617S2)" A.C.B.S 
pwd 
date 
NOM="A.C.B.S" 
echo $NOM 
echo -n "Introduce el numero de carpetas que quieras :" 
read x 
if (($x<=10)); then 
echo "Son $x carpetas" 
else (($ <10)) 
echo -n "El número de carpetas tiene que ser entre 1 i 10 :" 
read x2 
echo "Son $x2 carpetas" 
fi 
cd .. 
cd /var 
sudo mkdir carpetaprincipal 
cd .. 
cd /var/carpetaprincipal 
sudo mkdir carpeta {1..10} 
+0

Was ist das Problem in Ihrem Skript? –

Antwort

2

Sie seq mit xargs die Anzahl der Ordner für verwenden könnten gewählt iterieren und erstellen der Eingang:

#!/bin/bash 

echo "(1617S2)" A.C.B.S 
pwd ; date 
NOM="A.C.B.S" ; echo $NOM 

function makeFolders() { 
    echo -n "Introduce el numero de carpetas que quieras :" 
    read -r x 

    if [[ "$x" -lt 11 ]] && [[ "$x" -gt 0 ]]; then 
     echo "Son $x carpetas" 

     cd ../var || exit 
     mkdir carpetaprincipal 

     cd carpetaprincipal || exit 
     seq "$x" | xargs -I{} mkdir carpeta_{} 
    fi 

    if [[ "$x" -lt 1 ]] || [[ "$x" -gt 10 ]]; then 
     echo "El número de carpetas tiene que ser entre 1 i 10!" 
     makeFolders # you could optionally exit 1 here 
    fi 
} 

makeFolders 

Es gab einige andere Probleme mit Ihrem Skript, vor allem die Logik ergab keinen Sinn. Wenn Sie mehr als 10 oder weniger als 1 eingeben, erlaubt das Skript dem Benutzer immer noch das Erstellen von Ordnern, die darüber liegen, was erlaubt sein soll. Wenn Sie diese Methoden in eine Funktion einfügen, können Sie auch bei einem Fehler zur Eingabezeile zurückkehren. Außerdem sollte read-r enthalten, sonst hat es das Potenzial, Backslashes zu verfälschen.

+0

Vielen Dank! Wirklich nützlich :) – acbernal

0

mehr mkdir zu tun, während eine variable Anzahl von Zeiten Looping:

x2=4 
i=1 
while [ "$i" -le "$x2" ] 
    do 
    sudo mkdir carpeta$1 
    i=$(($i + 1)) 
done 
+1

Wenn Sie die Klammerextension verwenden möchten, verwenden Sie sie wie folgt: 'sudo mkdir carpeta {1..10}'. – chepner

+0

Danke für Ihre Hilfe! – acbernal

Verwandte Themen