Next: while-Kommando Up: Ablaufsteuerung Previous: test-Kommando
for-Kommando
-
Beispiel:
#!/bin/sh # # lsdir (Version 1): # Aufruf: lsdir1 <verz_1> [<verz_2> ... ] # for i do ls -l $i | grep '^[Dd]' done
Für jedes Aufrufargument wird die Pipeline ausgeführt. - Problem: bei Aufruf ohne Argument erfolgt keine Anwendung auf aktuelles Verzeichnis, da for-Körper überhaupt nicht abgearbeitet wird
-
Lösung:
#!/bin/sh # # lsdir-Version: # Aufruf: lsdir2 <verz_1> [<verz_2> ... ] # if [ $# -eq 0 ] then lsdir2 . else for i do ls -l $i | grep '^[Dd]' done fi
-
allgemeine Form des for-Kommando:
for var [in zk1 zk2 ...zkn ]do
cmd_liste
done
Der Shell-Variablen var wird in jedem Zyklus eine Zeichenkette zki zugewiesen und damit cmd_liste abgearbeitet. (Dort wird natürlich auf var Bezug genommen.) -
Beispiele:
#!/bin/sh # # Erzeugen von Files # # Aufruf: create <file_1> [<file_2> ...] # if [ $# -eq 0 ] then echo "Aufruf: $0 file_1 [file_2 ...]" else for i do >$i done fi
#!/bin/sh # # lsdir-Version fuer das aktuelle Verzeichnis # # Aufruf: lsdir3 # for i in * do if [ -d $i ] then echo $i fi done
-
Bemerkung:
- Metazeichen (z.B. *) erlaubt, d.h. es wird Filenamengenerierung durchgeführt
- nur Verzeichnisnamen aufgelistet
-
Beispiel:
#!/bin/sh # Ausgabe von Informationen zu einem Nutzerkennzeichen # in der Form: # NUTZER-KZ: <nkz> HOME-DIR: ... LOGIN-SHELL: ... # # Aufruf: $0 <nkz_1> ... if [ $# -eq 0 ] then echo "Aufruf: $0 nutzerkennzeichen ..." exit 1; fi for i in $* do if grep "^$i:" /etc/passwd >/tmp/nkz$$ then h=`cat /tmp/nkz$$ | cut -f6 -d':'` p=`cat /tmp/nkz$$ | cut -f7 -d':'` echo "NUTZER-KZ:$i HOME-DIR:$h LOGIN-SHELL:$p" else echo "NUTZER-KZ $i auf dieser Maschine nicht vorhanden" fi done rm /tmp/nkz$$