https://www.franzmatejka.at/htl/doc/SYTB_3/06_cmdsubst.html
$(befehl) kann man den Output dieses Befehls als Variablen Wert verwenden$((3+5)). Außerdem muss man in Rechenoperationen vor Variablen kein $ schreiben: $((Var1*10))" zu verschachteln, siehe Beispiel unten.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
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.
echo "Es sind $(ls $1 | wc -w) Einträge im dir $1"
$1 ist das erste Command Line Argumentwcwc -w zählt die Wörter und gibt die Anzahl zurück┌──(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
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)
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)"
date +%s gibt aktuelles Datum in Sekunden zurück--date kann man das Datum zu einem gewünschten Datum setzen$((...)) aus Wichtig bei = keine Leerzeichen┌──(kali㉿kali)-[~/SYTB/260414]
└─$ ./htlBall.sh
Es sind noch 276 Tage bis zum HTL Ball (2027-01-16)
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.
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 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
sed -n ${randomNumber}p gibt die randomNumber -te Zeile zurückalex@fedora:/tmp$ ./random.sh
setzen geworden Parteien schließlich Form
alex@fedora:/tmp$ ./random.sh
gleichen müsse Regierung zeigte Bayern
Diese Übungen sind sich nicht mehr ausgegangen.