0 Daumen
607 Aufrufe

Frage:

Erstellen Sie ein Shell-Skript, welches den Skriptnamen, die Shell-Prozess-ID, den Shell-Pfadnamen, das aktuelle Datum, alle Aufrufargumente des Skriptes sowie die Anzahl der Zeilen, Worte, Zeichen der Datei mit dem 1.Aufrufarguments($1) auf stdout ausgibt und gleichzeitig in eine Datei mit dem Namen des 2.Aufrufargumentes ($2) schreibt. Führen Sie das Skript aus.

Code:

args= "" 
for argument in $*
do
args= "$args$argument"
done
echo "Skriptname: $0
Prozess-ID: $$
Aktuelles Datum: $(date)
Argumente: $args
Word count: $(wc $1)" > $2


Ansatz/Problem:

Ich weiß nicht mal ob der Code richtig ist und funktioniert.

Avatar von

1 Antwort

0 Daumen

Antwort mit KI erzeugt

Antwort und Verbesserung des Skripts

Der vorgelegte Code ist ein guter Ansatzpunkt, hat jedoch einige Mängel und Unvollständigkeiten, wenn man die gestellte Aufgabe betrachtet. Ich werde zuerst eine verbesserte Version des Skripts vorstellen und dann auf die einzelnen Verbesserungen eingehen.

bash
#!/bin/bash

# Speichen der Skriptname, Shell-Pfadname, und aktuellen Datum in Variablen
scriptName=$0
shellPath=$BASH
currentDate=$(date)

# Speichern aller Aufrufargumente in einer Variablen
args="$*"

# Berechnen der Anzahl der Zeilen, Worte, Zeichen des Files (1. Argument)
if [ -f "$1" ]; then
    fileStats=$(wc "$1" | awk '{print "Zeilen: " $1 ", Wörter: " $2 ", Zeichen: " $3}')
else
    fileStats="Datei $1 existiert nicht"
fi

# Konsolidieren der Informationen
output="Skriptname: $scriptName
Prozess-ID: $$
Shell-Pfadname: $shellPath
Aktuelles Datum: $currentDate
Argumente: $args
$fileStats"

# Ausgabe auf stdout und in die Datei (2. Argument)
echo "$output" | tee "$2"


Verbesserungen und Erläuterungen:

- Shebang hinzugefügt: Die erste Zeile #!/bin/bash (Shebang) legt fest, welcher Interpreter das Skript ausführen soll. In diesem Fall bash.
- Variablennamen und -Zuweisungen: Ich habe das Skript für mehr Lesbarkeit und Verständlichkeit verändert, indem ich Variablennamen eingesetzt habe, die ihre Rolle klarer definieren.
- Prüfung, ob die Datei existiert: Der verbesserte Code prüft mit einer If-Bedingung, ob die Datei (erstes Argument $1) existiert. Falls nicht, wird eine entsprechende Meldung ausgegeben.
- Verwendung von awk zur Formatierung von wc Ausgabe: Ich habe awk verwendet, um die Ausgabe des Befehls wc (word count) zu formatieren, um klar zu definieren, welche Zahlen Zeilen, Wörter und Zeichen repräsentieren.
- Einführung von tee zur Ausgabe: Statt die Ausgabe nur in eine Datei umzuleiten, verwendet das verbesserte Skript tee, um die Ausgabe gleichzeitig auf stdout und in die Datei zu schreiben, die im zweiten Argument ($2) spezifiziert ist.

Führen Sie das Skript aus, indem Sie es zunächst speichern (z.B. als info_script.sh), dann ausführbar machen mit chmod +x info_script.sh, und schließlich mit zwei Argumenten ausführen, z.B. ./info_script.sh myfile.txt outputfile.txt. Das erste Argument sollte ein existierender Dateiname sein, während das zweite Argument der Name der Datei ist, in die die Ausgabe geschrieben wird.
Avatar von

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community