https://www.franzmatejka.at/htl/doc/SYTB_3/14_if.html
Struktur:
if [ $1 -gt 100 ]
then
echo "Hey that's a large number."
pwd
fi
test bzw eckige Klammern oder mit Shell Arithmetik:if (( x > y ))
then
echo "x > y"
fi
then und endet bei fielse -> dann muss else zwischen then und fiif [ -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
Schreibe ein bash Skript das 2 Zahlen als Argumente aus der Kommandozeile übernimmt. Die größere der beiden Zahlen soll ausgegeben werden.
#!/bin/bash
if (( $1 > $2 ))
then
echo $1
fi
if (( $2 > $1 ))
then
echo $2
fi
#!/bin/bash schreiben┌──(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
Schreibe ein Script das von einer als Argument übergebenen Zahl prüft ob sie gerade oder ungerade ist.
#!/bin/bash
if (( $1 % 2 == 0))
then
echo "gerade"
else
echo "ungerade"
fi
┌──(kali㉿kali)-[~/SYTB/260505]
└─$ ./gerUng.sh 2
gerade
┌──(kali㉿kali)-[~/SYTB/260505]
└─$ ./gerUng.sh 1
ungerade
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]:
j: Das Directory wird gelöscht und wieder wie oben angelegt.n: Das Skript wird beendet.#!/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
ls und wc geschaut wie viele Elemnte es hat (die -l Option von wc zählt die Zeilen)read wird die user antwort in der Variable answer gespeichert┌──(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
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.
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
Diese Übung ist sich nicht mehr ausgegangen.