it-swarm.com.de

Bash-Skript zum Erstellen eines Verzeichnisses

Ich spiele mit Skripten herum, ich kann ein Skript erstellen, das mich beim Ausführen auffordert, einen Namen für ein neues Verzeichnis einzugeben, es erstellt und dann mehrere Dateien erstellt, Zeilen ausgibt und dann alles löscht.

Was ich tun möchte, ist es leicht zu morphen, so dass es das Verzeichnis von selbst erstellt und benennt!

Es scheint eine sinnlose Übung zu sein, die ich kenne, aber damit herumzuspielen ist der beste Weg, wie ich lerne.

Hier ist mein aktuelles Skript:

#!/bin/bash   
echo "Give a directory name to create:"    
read NEW_DIR    
ORIG_DIR=$(pwd)    
[[ -d $NEW_DIR ]] && echo $NEW_DIR already exists, aborting && exit    
mkdir  $NEW_DIR    
cd $NEW_DIR    
pwd    
for n in 9 8 7 6 5 4 3 2 1 0    
do        
touch file$n    
done

ls file?    

for names in file?    
do       
echo This file is named $names > $names    
done

cat file?

cd $ORIG_DIR

rm -rf $NEW_DIR

echo "Goodbye"
7

Anstatt den Befehl read zu verwenden, um den Wert vonNEW_DIR von der Eingabe abzurufen, können Sie den fest codierten Wert für die Variable NEW_DIR in festlegen folgenden Weg:

ersetzen Sie die folgende Zeile in Ihrem Skript:

read NEW_DIR    

mit der folgenden Zeile:

NEW_DIR="new_dir_hard_coded_value"

Link für weitere Informationen zu bash-scripting-tutorial/bash-variables

5
Yaron

Wenn Sie eine Überraschung wünschen, können Sie anstelle der Hardcodierung des Namens eine Technik verwenden, um beispielsweise eine zufällige Zeichenfolge zu generieren

NEW_DIR=$(tr -cd '[:alnum:]' < /dev/urandom | fold -w8 | head -n1)

Dadurch wird NEW_DIR auf eine Zeichenfolge von acht alphanumerischen Zeichen festgelegt. Jedes Mal, wenn Sie das Skript ausführen, hat das neue Verzeichnis einen anderen zufälligen Namen ...

Oder um ein zufälliges Wort zu erhalten, wählen Sie ein Wörterbuch aus /usr/share/dict/ und verwenden Sie shuf, zum Beispiel:

$ shuf -n1 /usr/share/dict/british-english
soupier
$ shuf -n1 /usr/share/dict/british-english
penguins

Damit

NEW_DIR=$(shuf -n1 /usr/share/dict/british-english)
mkdir "$NEW_DIR"
...
5
Zanna

Anstatt zur Benutzereingabe aufzufordern, können Sie Werte mithilfe des Variablenzuweisungsoperators (=) in Skripten fest codieren. So sind die folgenden zwei Zeilen,

 echo "Geben Sie einen zu erstellenden Verzeichnisnamen an:" 
 read NEW_DIR 

kann durch eine einzelne Zeile ersetzt werden.

NEW_DIR = "welchen_Namen_Sie_bitte"



Übrigens, ich weiß, dass dies für die Frage nicht relevant ist, aber in der for -Schleife, die Sie in Ihrem Skript verwendet haben, können Sie Kurzcode für den Bereich schreiben. Anstelle von 9 8 7 6 5 4 3 2 1 0 können Sie es als schreiben

 für n in {9..0} 
3

Sie können sogar noch einen Schritt weiter gehen: Sie können "read" anweisen, einen Vorschlag für den Ordnernamen anzubieten, ihn durch Drücken der Eingabetaste zu akzeptieren oder ihn nach Belieben zu ändern:

read -p "Give a directory name to create: " -ei "default_name" NEW_DIR;

dies würde eine Linie zeigen:

Give a directory name to create: default_name

Um mit den obigen Vorschlägen zu kombinieren, können Sie Folgendes tun:

# pre-set NEW_DIR to a value or to any random string 
# as suggested in the other answers
NEW_DIR="default_name"

# Prompt for new directory name, suggesting previously selected default answer
read -p "Give a directory name to create: " -ei "$NEW_DIR" NEW_DIR;

Beachten Sie, dass read -p "text" zur Eingabe des Textes auffordert und in derselben Zeile nach der Antwort fragt. Wenn Sie sich an Ihren Code halten und ihn nach dem 2-Zeilen-Format fragen möchten, können Sie dies tun

echo "Give a directory name to create:"  
read -ei "$NEW_DIR" NEW_DIR
3
stealz