3AHITS-SYTB-Schauer-Alexander

Arbeitsbericht

Übersicht

Erklärung if statement

https://www.franzmatejka.at/htl/doc/SYTB_3/14_if.html

Zusammenfassung

Struktur:

if [ $1 -gt 100 ]
then
  echo "Hey that's a large number."
  pwd
fi
if (( x > y )) 
then
  echo "x > y"
fi
if [ -n "$3" ]
then
  echo "Parameter #3 is $3"
else
  echo "Parameter #3 fehlt"
fi
if [ -r $1 ] && [ -s $1 ]
then
    # wenn beide stimmen
fi
if [ $USER = 'bob' ] || [ $USER = 'andy' ]
then
    # wenn eines der Beiden stimmt
fi

Übung (Maximum)

Angabe:

Schreibe ein bash Skript das 2 Zahlen als Argumente aus der Kommandozeile übernimmt. Die größere der beiden Zahlen soll ausgegeben werden.

Lösung:

#!/bin/bash

if (( $1 > $2 ))
then
        echo $1
fi

if (( $2 > $1 ))
then
        echo $2
fi

Erklärung:

Output:

┌──(kali㉿kali)-[~/SYTB/260505]
└─$ ./maximum.sh 100000000 1000
100000000
                                   
┌──(kali㉿kali)-[~/SYTB/260505]
└─$ ./maximum.sh 10 1000       
1000
           
┌──(kali㉿kali)-[~/SYTB/260505]
└─$ ./maximum.sh 10 10  

Übung (Un-/Gerade)

Angabe:

Schreibe ein Script das von einer als Argument übergebenen Zahl prüft ob sie gerade oder ungerade ist.

Lösung:

#!/bin/bash

if (( $1 % 2 == 0)) 
then
        echo "gerade"
else
        echo "ungerade"
fi

Erklärung:

Output:

┌──(kali㉿kali)-[~/SYTB/260505]
└─$ ./gerUng.sh 2 
gerade
                           
┌──(kali㉿kali)-[~/SYTB/260505]
└─$ ./gerUng.sh 1 
ungerade

Übung (Directory)

Angabe:

Schreibe ein Skript makedir.sh das mit einem Argument aufgerufen wird.

$ ./makedir.sh xyz

Ein Directory mit dem Namen xyz soll angelegt werden falls es nicht existiert. Im Directory lege eine Datei mit dem Namen xyz.txt und Inhalt xyz an.

Existiert das Directory bereits so soll gefragt werden ob das Directory gelöscht werden darf. Bei dieser Abfrage soll angegeben werden wie viele Files sich im Directory befinden.

Soll das Directory "xyz" (mit 5 Files) gelöscht werden? [j|n]:

Lösung:

#!/bin/bash

DIR=$1

if [ -d $DIR ]
then
        NumberFiles=$(ls $DIR | wc -l)
        echo "Soll das Directory \"xyz\" (mit $NumberFiles Files) gelöscht werden? [j|n]: "
        read answer
        if [ $answer = "j" ] || [ $answer = "J" ]
        then
                rm -rf $DIR
                mkdir $DIR
                echo $DIR > $DIR/$DIR.txt
        fi
else
        mkdir $DIR
        echo $DIR > $DIR/$DIR.txt
fi

Erklärung:

Output:

┌──(kali㉿kali)-[~/SYTB/260505]
└─$ ls    
1  2  gerUng.sh  makedir.sh  maximum.sh  zahl1  zahl2

┌──(kali㉿kali)-[~/SYTB/260505]
└─$ ./makedir.sh xyz

┌──(kali㉿kali)-[~/SYTB/260505]
└─$ ls             
1  2  gerUng.sh  makedir.sh  maximum.sh  xyz  zahl1  zahl2

┌──(kali㉿kali)-[~/SYTB/260505]
└─$ touch xyz/abc.txt

┌──(kali㉿kali)-[~/SYTB/260505]
└─$ ./makedir.sh xyz 
Soll das Directory "xyz" (mit 2 Files) gelöscht werden? [j|n]: 
j

┌──(kali㉿kali)-[~/SYTB/260505]
└─$ ls xyz           
xyz.txt

Übung (number lines script)

Angabe:

Schreibe ein Skript number.sh das von der Kommandozeile aus aufgerufen werden kann.

Angenommen es gibt die Datei test.txt mit Inhalt:

bbb eins
ccc zwei
aaa drei

Grundsätzlich kann das Skript mit einer Datei als Argument ausgeführt werden:

$ ./number test.txt
$ cat test.txt
1 bbb eins
2 ccc zwei
3 aaa drei

Es werden die einzelnen Zeilen nummeriert (dafür kann das Tool nl verwendet werden). Achtung: das Skript soll die Datei verändern nicht ausgeben.

Sollte die Datei nicht exisitieren, nicht lesbar sein oder leer sein soll ein entsprechender Fehlertext ausgegeben werden.

Es soll weiters auch möglich sein dem Tool Daten über stdin zu übergeben (wenn keine Datei angegeben wurde):

$ sort test.txt | ./number.sh
1 aaa drei
2 bbb eins
3 ccc zwei

Hinweis: /dev/stdin kann in der Kommandozeile wie ein Dateiname verwendet werden und liefert die Daten von stdin.

Die Verwendung der Option -? soll dann noch zur Ausgabe eines Hilfetexts führen:

number.sh: number lines of input
usage: number.sh [FILE]
FILE ... path to readable file of nonzero length
if FILE is omitted data is read from standard input

Hinweis: der Befehl exit beendet sofort die Skriptabarbeitung.

Lösung:

if [ "$1" = "-?" ]
then
        echo "number.sh: number lines of input"
        echo "usage: number.sh [FILE]"
        echo "FILE ... path to readable file of nonzero length"
        echo "if FILE is omitted data is read from standard input"
        exit
fi

if [ ! -e $1 ] || [ ! -r $1 ] || [ ! -s $1 ]
then
        echo "Keine Datei angegeben"
        exit
else
        tmpfile=$(mktemp)
        nl $1 > $tmpfile
        mv $tmpfile $1
        exit
fi

if [ -t 0 ]
then
        echo "Keine Datei angegeben"
        exit
else
        nl /dev/stdin
        exit
fi

Erklärung:

Nicht erledigt

Diese Übung ist sich nicht mehr ausgegangen.