3AHITS-SYTB-Schauer-Alexander

Arbeitsbericht

Übersicht

Erklärung Arithmetik

https://www.franzmatejka.at/htl/doc/SYTB_3/09_arithmetic.html

Zusammenfassung

let

Wichtig keine Leerzeichen erlaubt!

let a=5+4
let b=100-$a

geht auch mit Quotes

let "a = 5 + 4"

expr

expr 5 + 4

oder mit Command Substitution

echo $(expr 5 + 4)

Doppelklammer-Arithmetik

Beispiel

b=$(( 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))

Übung (Multiplizierer)

Angabe:

Erstelle ein Skript das 2 Zahlen als Kommandozeilenargumente übernimmt. Multipliziere diese Zahlen und gib das Ergebnis aus, verwende jede der 3 besprochenen Methoden.

Lösung:

#!/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))

Erklärung:

Output:

┌──(kali㉿kali)-[~/SYTB/260421]
└─$ ./multiplier.sh 3 9
27
27
27

Übung (Werkstatt Summe)

Angabe:

Schreibe ein shell Script dass die Summe aller Beträge in klassenkassa.csv mit dem Text Werkstatt in ermittelt.

Anleitung:

Lösung:

if ! 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

Erklärung:

Output:

┌──(kali㉿kali)-[~/SYTB/260421]
└─$ ./werkstattSumme.sh   
411.09

Übung (Zeitmessung)

Angabe:

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.

Lösung:

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.*

Erklärung:

Output:

alex@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

Nicht erledigt

Diese Übung ist sich nicht mehr ausgegangen.