+1 Daumen
338 Aufrufe

Ich würde gerne ein Shell-Skript in Kali Linux erstellen, welches beim Aufruf dir.sh <name> <count> eine Verzeichnisstruktur erstellt. Name steht dabei für den Namen des zu erstellenden Hauptverzeichnisses und count für die Anzahl der zu erstellenden Unterverzeichnisse.

Im Skript soll zunächst überprüft werden, ob das angegebene Verzeichnis bereits existiert oder nicht. Falls es bereits existiert, soll es eine Abfrage für einen neuen Namen geben. Die Namen der einzelnen Unterverzeichnisse sollen generell per Abfrage festgelegt werden. Dabei soll das Hauptverzeichnis für alle Benutzer beschreibbar sein, die Unterverzeichnisse sollen jedoch nur lesbar sein. Ergänzend sollte es nach jedem Schritt noch eine Statusmeldung geben (z. B. "Verzeichnis wurde erstellt").

Meine Idee sieht bisweilen so aus:

V=$1
if [ -e V ]
then
read V
mkdir $($V)
echo "Verzeichnis $V wurde erstellt"
else
mkdir $($V)
echo "Verzeichnis $V wurde erstellt"

Das wäre also erst mal mein Code für das Überprüfen bzw. Erstellen des angegebenen Hauptverzeichnisses. Abgesehen davon, dass ich mir noch nicht mal sicher bin, ob die Syntax so richtig ist (z. B. mkdir $($V), habe keine Ahnung, ob man das wirklich so schreibt), weiß ich auch nicht, wie ich die anderen Schritte angehen soll. Wie sage ich z. B., dass noch so viele Unterverzeichnisse, wie beim Skript-Aufruf angegeben, erstellt werden sollen (sicherlich irgendwas mit $2)?

Avatar von

1 Antwort

0 Daumen

Antwort mit KI erzeugt

Shell-Skript erstellen (Verzeichnisstruktur erstellen)

Dein Ansatz ist schon ein guter Start. Es gibt jedoch einige Verbesserungen, um das Skript funktionsfähig und effizienter zu gestalten. Im Folgenden findest du einen kompletten Vorschlag für dein Skript:

bash
#!/bin/bash

# Hauptverzeichnis und Anzahl der Unterverzeichnisse als Argumente übernehmen
haupt_verzeichnis=$1
anzahl_unterverzeichnisse=$2

# Überprüfen, ob das Hauptverzeichnis bereits existiert
if [ -d "$haupt_verzeichnis" ]; then
  echo "Das Verzeichnis $haupt_verzeichnis existiert bereits."
  # Abfrage für einen neuen Namen
  read -p "Bitte geben Sie einen neuen Namen ein: " neuer_name
  haupt_verzeichnis=$neuer_name
fi

# Hauptverzeichnis erstellen
mkdir -m 777 "$haupt_verzeichnis" # Für alle Benutzer beschreibbar
echo "Hauptverzeichnis $haupt_verzeichnis wurde erstellt."

# Unterverzeichnisse erstellen
for (( i=1; i<=anzahl_unterverzeichnisse; i++ ))
do
  read -p "Name für das $i. Unterverzeichnis: " unternamen
  mkdir -m 555 "$haupt_verzeichnis/$unternamen" # Nur lesbar für alle Benutzer
  echo "Unterverzeichnis $unternamen wurde im Verzeichnis $haupt_verzeichnis erstellt."
done


Hier die Erläuterung der Verbesserungen und der Funktionsweise des Skripts:

1. Überprüfen des Hauptverzeichnisses: Statt [ -e V ] verwenden wir [ -d "$haupt_verzeichnis" ] um zu testen, ob ein Verzeichnis und nicht nur eine Datei existiert. Außerdem müssen Variablen in Anführungszeichen gesetzt werden, um auch Namen mit Leerzeichen korrekt zu behandeln.

2. Variable nutzen: Dein Ansatz mit mkdir $($V) ist nicht korrekt. Für die Verwendung von Variablen in Kommandos, nutze direkt $haupt_verzeichnis ohne zusätzliche $()-Substitution.

3. Verzeichnisberechtigungen: Mit mkdir -m 777 beziehungsweise mkdir -m 555 werden die Berechtigungen direkt beim Erstellen des Verzeichnis gesetzt. 777 erlaubt jedem Nutzer, das Verzeichnis zu lesen, zu schreiben und darin zu suchen. 555 erlaubt Lesen und Suchen für alle Nutzer, aber kein Schreiben.

4. Schleife für Unterverzeichnisse: Die Schleife for (( i=1; i<=anzahl_unterverzeichnisse; i++ )) läuft so oft, wie Unterverzeichnisse erstellt werden sollen. Für jedes Unterverzeichnis wird der Benutzer um einen Namen gebeten und das Unterverzeichnis dann entsprechend erstellt.

Kopiere dieses Skript in eine Datei, z.B. dir.sh, und mach es mit chmod +x dir.sh ausführbar. Anschließend kannst du es mit ./dir.sh MeinHauptverzeichnis 3 aufrufen, wobei MeinHauptverzeichnis der Name des Hauptverzeichnisses ist und 3 die Anzahl der zu erstellenden Unterverzeichnisse.
Avatar von

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community