# Anfänger Shell Programmierung



## RedoXXX (20. April 2006)

Hallo erstmals

Ich lerne gerade in der Schule Shell Programmierung, und kenne mich dementsprechend nicht so gut aus. Ich habe 2 Beispiele aufgetragen bekommen und ich hoffe ihr könnt mir helfen.

Bsp1.: hab ich schon gelöst, aber ich bekomm den Fehler " [0: command not found" dieser Fehler kommt für 2 Zeilen und zwar 7 und 12. Hier is der Code

////////////////////////
#!bin/bash

a=$#
e="0"
z="0"
if["$z" - lt "2"]; then
echo zu wenige parameter
exit 1
fi

while ["$z" -lt "$a"]; do
e='expr $e   $1'
shift 1
z='expr $z   1'
done

echo $e
/////////////////////////////////////



Bsp2.: 
offiziele Angabe:
ms[path1  path2..]

user loginname:
x directories mit xx Bytes
y files mit yy Bytes
Fehler: Pfad path existiert nicht

Meine Annahme:
Anders gesagt ich soll ein SKript schreiben dass die Größe von allen Dateien die in Verzeichnisse enthalten sind ausgeben, wobei ich Ordnernamen als Argument übergebe.
Und die Größe der Verzeichnisse

kann mir jemand helfen vielleicht beraten oder es schnell schreiben is ja angeblich nicht viel

und nochwas zum ersten ich test den skript so aus in putty:   ./num.sh      
num.sh die name der shell

ich hoffe ihr könnt mir helfen danke schon mal im voraus


----------



## Neurodeamon (21. April 2006)

Zeile 7 sollte nur mit den fehlenden doppelten Anführungsstrichen Probleme gehabt haben.
In Zeile 12 (und 14) solltest Du statt den einzelnen Anführungstrichen den sogenannten Backtick verwenden. Theoretisch sollte das Script dann laufen (habe nicht grossartig überprüft)



```
#!bin/bash

a=$#
e="0"
z="0"
if["$z" - lt "2"]; then
    echo "zu wenige parameter"
    exit 1
fi

while ["$z" -lt "$a"]; do
    e=`expr $e $1`
    shift 1
    z=`expr $z 1`
done

echo $e
```


----------



## DonMarkeZ (21. April 2006)

Halli hallo ^^

hi soweit ich weiß musst du beim ersten Beispiel das so machen 


```
echo "zu wenig parameter"
```

Beim 2. Script würde ich es so machen das ich per list (ls -lS = Listet alle Dateien in dem Ordner nach ihrer Größe geordnet auf) alles anzeigen lasse. Weiß ja jetzt nicht genau was du machen musst. Ob da jetzt nur die größen stehen sollen oder so.
Ich hoffe ich konnte dir, wenn auch beschränkt, ein wenig weiterhelfen ^^


----------



## deepthroat (21. April 2006)

Hi.

@RedoXXX: Verwende doch bitte die Code Tags. (Da erscheinen dann z.B. auch Zeilennummern so das man gleich sieht welche Zeile du meinst).

@Neurodeamon: Meiner Meinung nach sind das in Zeile 12 und 14 umgekehrte einfache Anführungszeichen - sollte also richtig sein.

@DonMarkeZ: Nein, das ist nicht der Fehler. Die Ausgabe funktioniert so oder so (allerdings wird bei der Version von RedoXXX zwischen den Worten nur ein einzelnes Zeichen ausgegeben (auch wenn mehrere Leerzeichen dazwischen stehen) - nämlich das erste Zeichen was in der Variablen IFS drin steht, bei dir immer genau das was zwischen den Anführungszeichen steht.

Die Fehler sind in der Zeile darüber. Das if muß von der eckigen Klammer durch ein Leerzeichen getrennt sein. Der kleiner-als Operator heißt -lt (da darf kein Leerzeichen zwischen dem Minus und dem lt sein. Es muß allerdings mind. ein Leerzeichen zwischen den eckigen Klammern und dem Inhalt der Klammern sein. Das Gleiche gilt natürlich auch für die Bedingung bei der while-Schleife; nur das Semikolon darf direkt hinter der schließenden Klammer kommen.

```
#!/bin/bash

a=$#
e="0"
z="0"
if [ "$a" -lt "2" ]; then
    echo "zu wenige parameter" 
    exit 1
fi
```
Gruß


----------



## Aiju (21. April 2006)

RedoXXX hat gesagt.:
			
		

> x directories mit xx Bytes


Ein Ordner ist so 0 Byte groß !
Das mit den  Dateien (sucht auch in Unterordnern):

```
#!/bin/bash
size=0;
tmp=0;
for i in `find`; do
 tmp=`stat -c "%s" $i`
 size=`expr $size + $tmp`
done
echo $size
```
find findet alle Dateien, stat -c "%s" (bzw. filesize) gibt die Dateigröße in Bytes aus. 
Mit expr addiere ich das ganze zusammen
EDIT: Musst du natürlich noch bearbeiten.


> und nochwas zum ersten ich test den skript so aus in putty:
> num.sh die name der shell



Ey, geh zu lade um den eck und kaufen dich tüte deutsch für 3 Geld 80, hat mich auch gehelft


----------



## RedoXXX (22. April 2006)

Aiju hat gesagt.:
			
		

> Ein Ordner ist so 0 Byte groß !
> 
> Ey, geh zu lade um den eck und kaufen dich tüte deutsch für 3 Geld 80, hat mich auch gehelft



 haha jaja bleib cool junge ich war in eile musste den programm am freitag zeigen, unter druck schreibt man sowas, um diesen sachverhalt zu ergründen besuche extra für dich ein seelenklempner, ergebnisse teile ich dir dann mit


(das mit seelenklempner is nur scherz, mach ich nicht wirklich ich wollt ein satz schreiben wo ich sehr deutsch klinge;-))


----------



## RedoXXX (22. April 2006)

Ich wollte mich noch bei allen bedanken für die antworten, falls ich probleme hab, werdet ihr dann wahrscheinlich wieder von mir hören. Ich teste alles Morgen oder Sonntag.

Danke nochmals


----------



## RedoXXX (22. April 2006)

ja hallo ich bins nochmal, ich bin noch immer bei bsp1, ich hab meine die fehler die ich hatte korregiert und jetzt bekomm ich eine neue fehlermeldung. und zwar:
./num.sh: line 12: [: expr $z + 1: integer expression expected

und bei echo gibt er statt der zahl das hier raus:
expr $e + $1


```
#!bin/bash

a=$#
e="0"
z="0"
if[ "$z" - lt "2" ]; then
echo "zu wenige parameter"
exit 1
fi

while [ "$z" -lt "$a" ]; do
e='expr $e   $1'
shift 1
z='expr $z   1'
done

echo $e
```


----------



## Aiju (22. April 2006)

```
e=`expr $e + $1`
```
Das sind Accent-Graves (oder auch Backticks)
und *KEINE EINFACHEN ANFÜHRUNGSZEICHEN*
Die machst du (auf der deutschen Tastatur) mit Shift und der Taste rechts neben

```
?
ß \
```
EDIT: Unter Windoof muss man danach noch Leertaste drücken


----------



## RedoXXX (23. April 2006)

WOW Danke BSP1 geht super danke wirklich, morgen versuche ich bsp2


----------



## Neurodeamon (23. April 2006)

> Das sind Accent-Graves (oder auch Backticks)
> und *KEINE EINFACHEN ANFÜHRUNGSZEICHEN*



@Aiju:
Danke für die Schützenhilfe. Ich vergesse das es nicht immer reicht auf die Fehler hinzuweisen und die korrekte Bezeichnung zu nennen. Manchmal ist eine Schritt-für-schritt-Anleitung erforderlich.

(Ich hätte aber nicht erwartet das mein Hinweis auf die Backticks komplett ignoriert wird) :suspekt:


----------



## Aiju (23. April 2006)

Neurodeamon hat gesagt.:
			
		

> @Aiju:
> Danke für die Schützenhilfe. Ich vergesse das es nicht immer reicht auf die Fehler hinzuweisen und die korrekte Bezeichnung zu nennen. Manchmal ist eine Schritt-für-schritt-Anleitung erforderlich.
> 
> (Ich hätte aber nicht erwartet das mein Hinweis auf die Backticks komplett ignoriert wird) :suspekt:


Manche Leute (PC-Anfänger) verwechseln die Accent-Aigu(´) Accent-Grave(`) Einfache Afz.(') und dopellte Afz. (")
Ich seh immer häufiger:
´Huhu hier bin ich´, sagte er.
Erlaubt sind(meiner Meinung)
"Huhu hier bin ich" und ,,Huhu hier bin ich" (So mach ich das häufig, dann meckert kein Deutsch-Besserwisser)


----------



## RedoXXX (23. April 2006)

prog zwei auch perfekt danke


----------

