https://www.franzmatejka.at/htl/doc/SYTB_3/09_arithmetic.html
let, expr und bash Doppelklammer-ArithmetikletWichtig keine Leerzeichen erlaubt!
let a=5+4
let b=100-$a
geht auch mit Quotes
let "a = 5 + 4"
exprexpr gibt das Ergebnis sofort aus anstelle es in einer Variable zu speicherexpr 5 + 4
oder mit Command Substitution
echo $(expr 5 + 4)
let+ - ++ -- * / % ** sind möglichb=$(( a + 3 ))
echo $b # 11
echo "Es sind $(( a + 5)) Wochen"
geht auch ohne return indem man das $ weglässt
((a=2*a))
((a++))
((a=a+4))
Erstelle ein Skript das 2 Zahlen als Kommandozeilenargumente übernimmt. Multipliziere diese Zahlen und gib das Ergebnis aus, verwende jede der 3 besprochenen Methoden.
#!/bin/bash
let erg=$1*$2
echo $erg
# * muss mit \ escaped werden, da es von expr als Wildcard interpretiert wird
echo $(expr $1 \* $2)
echo $(($1*$2))
* mit \* escapen sonst gehts nicht#!/bin/bash ganz oben sonst gehts nicht┌──(kali㉿kali)-[~/SYTB/260421]
└─$ ./multiplier.sh 3 9
27
27
27
Schreibe ein shell Script dass die Summe aller Beträge in klassenkassa.csv mit dem Text Werkstatt in ermittelt.
Anleitung:
grep und cut zum filtern.paste um diese zu einer Zeile zusammenzufassen – mit paste kann ein Ausdruck der Form 15+13+42+23 erstellt werden.$(( expr )) um das Ergebnis auszurechnenif ! test -f klassenkassa.csv; then
wget "https://www.franzmatejka.at/htl/doc/SYTB_3/testdata/klassenkassa.csv"
fi
rechnung=$(cat klassenkassa.csv | grep Werkstatt | cut -d, -f3 | paste -s -d '+')
echo "$rechnung" | bc
, und -f3 sorgt dafür, dass die 3. Spalte verwendet wirdpaste -s fügt horizontal zusammen und -d '+' fügt + dazwischen einbc Pipen da Bash nicht mit Floating Point Numbers rechnen kann┌──(kali㉿kali)-[~/SYTB/260421]
└─$ ./werkstattSumme.sh
411.09
Schreibe 2 Skripts: time_start.sh und time_stop.sh. Bei Aufruf von time_stop.sh wird die Anzahl der Sekunden ausgegeben die seit dem letzten Aufruf von time_start.sh vergangen sind.
Hinweis 1: verwende date um die Anzahl der Sekunden seit 01.01.1970 herauszufinden (die UNIX Zeit bezieht sich immer auf diesen Referenzpunkt).
Hinweis 2: Speichere die Zeit in time_start.sh in einer, mit mktemp erzeugten, temporären Datei.
time_start.sh:
mktemp uhrzeit.XXXXX
date +%s%N > uhrzeit.txt
time_stop.sh:
oldTime=$(cat uhrzeit.*)
newTime=$(date +%s%N)
echo "scale=3; (($newTime-$oldTime) / 1000000000)" | bc
rm -rf uhrzeit.*
date +%s%N gibt die Nanosekunden seit 01.01.1970 00:00 Uhr UTC ausscale=3; wird die Zahl mit 3 Nachkommastellen ausgegeben und durch 1000000000 rechnen da wir Sekunden und nicht Nanosekunden wollen und dann diese Rechnung in bc piepen da float Zahlalex@fedora:/tmp$ ./time_start.sh
uhrzeit.woSeI
alex@fedora:/tmp$ ./time_stop.sh
3.652
alex@fedora:/tmp$ ./time_start.sh
uhrzeit.ang4R
alex@fedora:/tmp$ ./time_stop.sh
5.377
Diese Übung ist sich nicht mehr ausgegangen.