3AHITS-SYTB-Schauer-Alexander

Arbeitsbericht

Übersicht

Erklärung Command Substitution

https://www.franzmatejka.at/htl/doc/SYTB_3/06_cmdsubst.html

Zusammenfassung

Beispiele der Doc

Datum bekommt man mit dem Befehl date.

$ echo "Das aktuelle Datum ist $(date)"
$ echo "Heute $(date -I) in einer Woche ist $(date --date='+1 week' -I)"

-I steht für das ISO Format.

WEEKS=10
DATE2=$(date --date="+$WEEKS week" -I)
echo "Heute $(date -I) in $WEEKS Wochen ist der $DATE2"

Hier ist ein " innerhalb eines " möglich (Verschachtelt)

echo "Heute $(date -I) in $WEEKS Wochen ist der $(date --date="+$WEEKS week" -I)"

Erstellt ein temporäres File

TEMP=$(mktemp).txt
echo "Erstelle ein temporäres File $TEMP"
echo "lorem ipsum dolor sit amet" >$TEMP

Berechnungen Beispiel

# Berechnungen
X=99999
Y=88888
Z=$(( X - Y ))
echo $Z

Übung (Anzahl Einträge in einem Verzeichnis)

Angabe:

Schreibe ein shellscript das als Argument einen Pfad auf ein Verzeichnis erhält. Das Script soll die Anzahl der Einträge in diesem Verzeichnis als Zahl ausgeben. Dies soll aus der ls Ausgabe mit wc ermittelt werden.

$ ./nbrentries.sh ~/test
Es sind 12 Einträge im dir ~/test

Hinweis – Vergleiche die Ausgaben von

ls
ls | cat
echo "$(ls)"

Dokumentiere den Unterschied, was ist die Logik dahinter.

Lösung:

echo "Es sind $(ls $1 | wc -w) Einträge im dir $1"

Erklärung:

Output:

┌──(kali㉿kali)-[~/SYTB/260414]
└─$ ./nbrentries.sh . 
Es sind 1 Einträge im dir .
                                   
┌──(kali㉿kali)-[~/SYTB/260414]
└─$ ./nbrentries.sh ..
Es sind 4 Einträge im dir ..
                                   
┌──(kali㉿kali)-[~/SYTB/260414]
└─$ ls .              
nbrentries.sh

┌──(kali㉿kali)-[~/SYTB/260414]
└─$ ls ..             
260324  260407  260414  3AHITS-SYTB-Schauer-Alexander

Übung (Tage bis zum Ball)

Angabe:

Schreibe ein Shell-Skript das die Anzahl der Tage bis zum HTL Ball ermittelt. Die Ausgabe soll in der folgenden Form sein.

Es sind noch 42 Tage bis zum HTL Ball (2027-01-16)

Hinweise:

Verwende das date Format für seconds since the Epoch (1970-01-01 00:00 UTC)

Lösung:

htlBallDate="2027-01-16"

currentDateSec=$(date +%s)
htlBallDateSec=$(date +%s --date=$htlBallDate)

diff=$((htlBallDateSec - currentDateSec))

echo "Es sind noch $((diff/86400)) Tage bis zum HTL Ball ($htlBallDate)"

Erklärung:

Output:

┌──(kali㉿kali)-[~/SYTB/260414]
└─$ ./htlBall.sh
Es sind noch 276 Tage bis zum HTL Ball (2027-01-16)

Übung (Zufälliger Satz)

Angabe:

Erstelle ein Skript das einen Satz aus 5 zufälligen Wörtern bildet, z.B.:

richtig ganzen Kilometer auf Mittel

Wähle die Wörter aus dieser Wortliste.

Lösung:

if ! test -f wortliste1000.txt; then
   wget "https://www.franzmatejka.at/htl/doc/SYTB_3/testdata/wortliste1000.txt"
fi

lines=$(wc -l < wortliste1000.txt)

for i in {1..5};
do
	randomNumber=$((RANDOM % lines + 1))
	echo -n "$(sed -n ${randomNumber}p < wortliste1000.txt) "
done
echo ""

Erklärung:

Erklärung aus Stackoverflow zu test:

The test command (written as [ here) has a "not" logical operator, ! (exclamation mark):

if [ ! -f /tmp/foo.txt ]; then
    echo "File not found!"
fi

Output:

alex@fedora:/tmp$ ./random.sh 
setzen geworden Parteien schließlich Form 

alex@fedora:/tmp$ ./random.sh 
gleichen müsse Regierung zeigte Bayern 

Nicht erledigt

Diese Übungen sind sich nicht mehr ausgegangen.