ABSTRACT: weitere vertiefung von bash scripts. (arithmetik, for loops, parameter behandlung. ) AUDIENCE: advanced users SYSTEM: any unix SECTION: basic unix commands AUTHOR: mond COPYRIGHT: GNU Free Documentation Licence http://www.gnu.org/licenses/fdl.txt zur wiederhohlung: bis jetzt haben wir folgende dinge ueber bash scripts gelernt: * substitution von befehlen auf die commandline. echo heute haben wir den $(date) * sezten von varibablen: NAME1="bla bla" * arithmetik: let ZAHL=3*7+1 * auswertung des returncodes mit $? * die test funktion die auch mit [ ] aufgerufen werden kann. * "if then else fi" bedingugen * "while do done" schleifen. heute lernene wir;: arithmetik mit $(( )) ausdruecken: ================================== die arithmtischen ausdruecke die man in einem let verwendet kann man direkt in einer commandline verwenden in dem man sie in $(( )) setzt: z.b.: echo die antwort auf die frage nach dem sinn des lebens ist $((2+5*8)) eine sache die man oft in scripts braucht: man moechte etwas fuer viele datein ausfuehren. for schleifen: ============== ------------------ for k in *.txt ; do echo $k done ------------------ wuerde den befehl echo $k fuer alle files mit der endung .txt im aktuellen verzeichniss ausfuehren. for k in a b c ; do echo der wert is $k ; done wuerde 3 zeilen ausgeben mit den werten a b und c prameteruebergabe: ================== ruft man ein shell script mit parametern aus so kann man diese in den variablen $1 $2 $3 usw erhalten. $0 enthaelt immer den namen des scripts selbst. ---------------------------------- #!/bin/bash echo das script mit dem namen $0 wurde mit dem ersten parameter $1 echo und dem zweiten parameter $2 aufgerufen shift echo die parameter sind jetzt $0 $1 $2 ---------------------------------- dieses scipt gibt also den ersten und den zweiten parameter aus. der bash befehl "shift" bewirkt dass der parameter $1 entfernt wird und durch $2 ersetzt wird. dieser $3.. also im eins verrueckt. das ist oft praktisch zur behandlung von optionen: z.b. folgendes script: ---------------------------------- #!/bin/bash X=nein if [ "$1" = "-x" ] ; then shift echo die option -x ist gewuenscht X=ja fi echo die parameter waren $* echo X=$X ----------------------------------- der ausdruck $* gibt mit spaces getrennt alle parameter aus. ein eventuell vorhandenes "-x" wird hier mit dem "shift" entfernt. ---------------------- #!/bin/bash for bla ; do echo $bla done ---------------------- in obigem script verwendet die vor schleife (weil wir kein in ... angegeben haben) nacheinander die dem script uebergebenn parameter um sie der variable $bla zuzuweisen. schliesslich will ich noch erwaehen dass die bash opreationen zum veraendern von variablen vor dem ausgeben hat T=abcde echo $T echo ${T} gibt den wert der variable einfach aus die version mit den klammern hat den vorteil dass man dahinter buchtaben schreiben kann. echo XX${T}XX ( echo XX$TXX wuerde ja nicht funktionieren... ) echo ${T%de} wuerde die zeichen "de" am ende wegfressen falls vorhanden. analog: echo ${T#ab} firsst die zeichen "ab" am anfang weg. echo ${T/bd/u} wuerde die zeichen "bd" durch ein "u" ersetzen. echo ${T:1:2} gibt nur die 2 zeichen nach dem ersten zeichen aus. etc... (mehr dazu bietet die man page von bash) EXERCISES: * schreibe ein shell script das alle file die .GIF heissen in .gif umbenennt. * schreibe ein shell script das versucht alle als parameter erhaltenen files in kleinbuchstaben umzubenennen. (hinweise: der befehl "tr" ist dafuer sehr nuetzlich) REFERENCES: man bash