Anfänger Shell Programmierung

RedoXXX

Grünschnabel
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
 
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)


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
 
Halli hallo ^^

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

Code:
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 ^^
 
Zuletzt bearbeitet:
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.
Bash:
#!/bin/bash

a=$#
e="0"
z="0"
if [ "$a" -lt "2" ]; then
    echo "zu wenige parameter" 
    exit 1
fi
Gruß
 
RedoXXX hat gesagt.:
x directories mit xx Bytes
Ein Ordner ist so 0 Byte groß !
Das mit den Dateien (sucht auch in Unterordnern):
Code:
#!/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
:confused:
Ey, geh zu lade um den eck und kaufen dich tüte deutsch für 3 Geld 80, hat mich auch gehelft ;)
 
Zuletzt bearbeitet:
Aiju hat gesagt.:
Ein Ordner ist so 0 Byte groß !
:confused:
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;-))
 
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
 
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

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
 
Code:
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
Code:
?
ß \
EDIT: Unter Windoof muss man danach noch Leertaste drücken
 

Anhänge

  • tastatur.png
    tastatur.png
    17,9 KB · Aufrufe: 28
Zuletzt bearbeitet:
Zurück