IT-Academy Logo
Sign Up Login Help
Home - Betriebssysteme - Linux - Anwendungssoftware - bash scripting



bash scripting

Weitere Vertiefung von bash scripts. (arithmetik, for loops, parameter behandlung).


Autor: Franz Schaefer (mond)
Datum: 04-02-2002, 08:21:54
Referenzen: man bash
Schwierigkeit: Fortgeschrittene
Ansichten: 8255x
Rating: 6 (2x bewertet)

Hinweis:

Für den hier dargestellte Inhalt ist nicht der Betreiber der Plattform, sondern der jeweilige Autor verantwortlich.
Falls Sie Missbrauch vermuten, bitten wir Sie, uns unter missbrauch@it-academy.cc zu kontaktieren.

[Druckansicht] [Als E-Mail senden] [Kommentar verfassen]



Übersicht

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)

______________________________________________
CD ist ein service von SILVER SERVER
der inhalt unterliegt der GFDL
_______________________________________________



Rolfhub
Senior Member
Beitrag vom:
12-10-2003, 14:40:17

Vorsicht Fallstrick

Bei BASH-Skripten lauert übrigens ein kleiner Fallstrick: Viele UNIX-/Linux-Programme kommen sowohl mit UNIX- als auch mit Windows-Zeilenumbrüchen klar, z. B. hat (meiner Erfahrung nach) der g++ (GNU C++ Compiler) keine Probleme mit Windows-Zeilenumbrüchen, die BASH scheint aber damit Probleme zu haben, hier helfen die Programme "todos" bzw. "fromdos" weiter (Packet "sysutils"). P.S.: Definition Windows-Zeilenumbruch=0x0D0A, UNIX-/Linux-Zeilenumbruch=0x0A.

-----------------------------------------------------


[back to top]



Userdaten
User nicht eingeloggt

Gesamtranking
Werbung
Datenbankstand
Autoren:04511
Artikel:00815
Glossar:04116
News:13565
Userbeiträge:16552
Queueeinträge:06248
News Umfrage
Ihre Anforderungen an ein Online-Zeiterfassungs-Produkt?
Mobile Nutzung möglich (Ipone, Android)
Externe API Schnittstelle/Plugins dritter
Zeiterfassung meiner Mitarbeiter
Exportieren in CSV/XLS
Siehe Kommentar



[Results] | [Archiv] Votes: 1158
Comments: 0