ubuntuusers.de

Hilfe bei einfachem Shell Script

Status: Ungelöst | Ubuntu-Version: Ubuntu 15.10 (Wily Werewolf)
Antworten |

noob.sh

Anmeldungsdatum:
1. Mai 2016

Beiträge: Zähle...

Hallo Leute, Ich hätte gerne ein Shell Skript das ein Verzeichnis überwacht. An das Skript wird der Pfad zu dem zu überwachenden Verzeichnis und eine Zeichenkette übergeben. Danach gibt das Programm für dieses Verzeichnis jeweils im Abstand von fünf Sekunden folgende Informationen aus: 1. die fünf größten Dateien (oder weniger, falls keine fünf Dateien vorhanden), 2. zweitens: die fünf (oder weniger, falls weniger davon vorhanden) Dateien die zuletzt modifiziert wurden unter den Dateien, die mit einer Zeichenkette beginnen, die als zweiter Parameter übergeben wurde.

zu1.also die dateien der größe nach sortieren kann ich ja mit dem befehl ls -S aber wie sorge ich dafür das nur die 5 größten dateien angezeigt werden?

zu2.die dateien die zuletzt modifiziert wurden kann ich ja ausgeben mit ls -t aber wie zeige ich nur die an die mit der zeichenkette beginnen die ich als parameter übergeben habe?

mein mini skript zum testen funktioniert schon nicht -.- es lautet:

1
2
3
#!/bin/bash
echo Liste der Dateien der größe nach sortiert:
ls -S

als Fehler erhalte ich ls:Ungültige Option --

und wenn ich zb. sleep 5 schreibe oder sleep 5s oder sleep 5 s klappt das auch nicht

die Aufgabe an sich ist nicht schwer aber bin ganz neu in diesem Thema wenn einer von euch eine mögliche Lösung aufzeigen könnte wäre das bestimmt sehr lehrreich für mich.

Danke und Gruß vom noob.sh

Bearbeitet von sebix:

Codeblock eingefügt.

sebix Team-Icon

Ehemalige

Anmeldungsdatum:
14. April 2009

Beiträge: 5582

Wie rufst du das Skript auf? Sobald du es aufuehrbar gemacht hast: chmod +x example.sh kannst du es so ausfuehren: ./example.sh

sebix Team-Icon

Ehemalige

Anmeldungsdatum:
14. April 2009

Beiträge: 5582

Zum ueberwachen eines Verzeichnisses kannst du inotify verwenden.

noob.sh

(Themenstarter)

Anmeldungsdatum:
1. Mai 2016

Beiträge: 11

danke für die schnellen antworten wenn ich das mit chmod mache bekomme ich als Fehler /bin/bash^M:Defekter Interpreter: Datei oder Verzeichniss nicht gefunden aber which bash gibt bei mir /bin/bash aus verstehe das also nicht wenn ich aber mit sh s.sh ausführe funktioniert es bekomme also nur den Fehler ls:Ungültige Option inotify möchte ich nicht verwenden da ich ja shell skript proggramierung üben möchte vorallem mit den grundbefehlen wie zb. grep, ls, more, cat, head

1
2
3
#!/bin/bash
echo Liste der Dateien der größe nach sortiert:
ls -S

wenn ihr das so ausführt werden dann bei euch alle dateien in dem ordner in dem ihr euch gerade befindet nach der größe ausgegeben?

bei mir nämlich nicht irgendwo steckt doch ein Fehler drin muss ich beim ausführen noch einen pfad oder sowas angeben??

Bearbeitet von sebix:

Bitte beachte die Forensyntax, danke!

frostschutz

Avatar von frostschutz

Anmeldungsdatum:
18. November 2010

Beiträge: 7790

Mach aus dem /bin/bash mal ein /bin/bash -x dann siehst du ein wenig mehr was die Bash da eigentlich macht.

Hast du das Script vielleicht mit Windows-Zeilenumbrüchen gespeichert?

noob.sh

(Themenstarter)

Anmeldungsdatum:
1. Mai 2016

Beiträge: 11

hi also wenn ich ins terminal einfach ls eingebe funktioniert das ganz normal wieso das nicht übers script geht keine ahnung meinst du /bin/bash -x im script? da bleibt alles gleich wenn ich das ins terminal eingebe kommt ganz viel text von dem ich nichts verstehe -.-

wenn du das ausführst:

1
2
3
#!/bin/bash
echo Liste der Dateien der größe nach sortiert:
ls -S

funktionierts?

Bearbeitet von sebix:

Bitte nutze die Forensyntax!

ChickenLipsRfun2eat Team-Icon

Anmeldungsdatum:
6. Dezember 2009

Beiträge: 12067

noob.sh schrieb:

1
2
3
#!/bin/bash
echo Liste der Dateien der größe nach sortiert:
ls -S

wenn ihr das so ausführt werden dann bei euch alle dateien in dem ordner in dem ihr euch gerade befindet nach der größe ausgegeben?

Ja. Funktioniert so bei mir.

Wie wäre es, wenn du die Fehlermeldung(en) hier im Codeblock postest?

noob.sh

(Themenstarter)

Anmeldungsdatum:
1. Mai 2016

Beiträge: 11

also ich führe aus: Liste der Dateien der größe nach sortiert: ls:Ungültige Option – ls --help liefert weitere Informationen

das ist der Fehler ...

und den fehler habe ich unter ubuntu und auch auf einem anderen pc mit cygwin unter windows

frostschutz schrieb:

Hast du das Script vielleicht mit Windows-Zeilenumbrüchen gespeichert?

ich bin mir nicht sicher wie genau muss ich es dennmit linux-Zeilenumbrüchen speichern?

ChickenLipsRfun2eat Team-Icon

Anmeldungsdatum:
6. Dezember 2009

Beiträge: 12067

Man kann dir nicht helfen, wenn du die Infos nicht rausrückst ☺

poste mal bitte

cat SCRIPTNAME
ls -lha SCRIPTNAME
./SCRIPTNAME

vom ersten Prompt zum letzten.

noob.sh

(Themenstarter)

Anmeldungsdatum:
1. Mai 2016

Beiträge: 11

1
2
3
4
5
6
7
8
lnx@lnx-G31T-M2:~/Schreibtisch/scripts$ cat s.sh
#!/bin/bash
echo Liste der Dateien der größe nach sortiert:
ls -S
lnx@lnx-G31T-M2:~/Schreibtisch/scripts$ ls -lha s.sh
-rwxrwxr-x 1 lnx lnx 71 Mai  1 14:23 s.sh
lnx@lnx-G31T-M2:~/Schreibtisch/scripts$ ./s.sh
bash: ./s.sh: /bin/bash^M: Defekter Interpreter: Datei oder Verzeichnis nicht gefunden

bittesehr wusste nicht was für infos du möchtest ^^ wenn du noch etwas brauchst sag bescheid

Bearbeitet von sebix:

Nutze bitte Codeblöcke wie in Forensyntax beschrieben!

sebix Team-Icon

Ehemalige

Anmeldungsdatum:
14. April 2009

Beiträge: 5582

Du hast einen Windows-Zeilenumbruch in deinem Skript am Ende der ersten Zeile. Darauf wurde aber auch schon hingewiesen.

frostschutz schrieb:

Hast du das Script vielleicht mit Windows-Zeilenumbrüchen gespeichert?

Und bitte verwende endlich die Codeblöcke. Ich habe keine Lust jeden deiner Posts nachbearbeiten zu müssen, damit er lesbar wird.

noob.sh

(Themenstarter)

Anmeldungsdatum:
1. Mai 2016

Beiträge: 11

danke ja mache ich beim nächsten mal habe jetzt gecheckt wie die codeblocks funktionieren sry^^ danke für deine mühe! also ich habe einfach enter benutzt als Zeilenumbruch das scheint falsch zu sein wie geht es dann unter linux ich habe keine ahnung? google sagt irgendwas mit \n aber wenn ich \n am ende der ersten zeile anfüge bekomme ich immer noch denselben fehler -.-

und wie mache ich zeilenumbrüche hier im forum ? sorry stehe auf dem schlauch

sebix Team-Icon

Ehemalige

Anmeldungsdatum:
14. April 2009

Beiträge: 5582

noob.sh schrieb:

also ich habe einfach enter benutzt als Zeilenumbruch das scheint falsch zu sein wie geht es dann unter linux ich habe keine ahnung?

Hast du deinen Editor umgestellt oder die Datei urspruenglich auf Windows erstellt?

In gedit kannst du im Speichern unter Dialog die Zeilenumbrueche auswählen (Linux/Windows/OS X). Ansonsten kannst du auch das Programm fromdos verwenden.

ChickenLipsRfun2eat Team-Icon

Anmeldungsdatum:
6. Dezember 2009

Beiträge: 12067

Soweit ich mich erinnern kann, verwendet Windows "\r\n" als Zeilenumbruch, Linuxe aber nur "\n". Die Enter-Taste ist die richtige, es kommt auf die Art der Spericherung an.

Am einfachsten wäre es, du würdest dein Script mit nano,vim oder so schreiben. Dann gibt es diese Problematik nicht. Alternativ kann man auch Dateien umwandeln (lassen).

Suchmaschine ergibt: Zeichensatz-Konverter (Abschnitt „Konvertierung-auf-der-Kommandozeile“)

frostschutz

Avatar von frostschutz

Anmeldungsdatum:
18. November 2010

Beiträge: 7790

nano und so kann das auch beim Abspeichern auswählen, ich glaube da wo du nach dem Dateinamen gefragt wirst ist es dann Alt-M oder sowas. Sollte in der unteren Zeile bei den Optionen aufgelistet sein beim Speichern.

Ansonsten dos2unix ...

Die Editoren unter Linux speichern normalerweise alles im Linux Format von daher die Frage wie du die Windows-Zeilenumbrüche hinbekommen hast. Es sei denn wine hat dir irgendwie MS Notepad untergejubelt...

Antworten |