lucas-o
Goto Top

Hilfe bei erstellung eines Suchskriptes in Bash Shell

Hallo ihr Alle,
Ich habe ein Problem, bei dem Ihr mir hoffentlich helfen könnt.
Diese Scripte sollen bei der täglichen Arbeit helfen.
Bitte um möglichst rasche Antwort.

Script 1

Beschreibung:

Script 1 soll in der Lage sein ein Verzeichnis nach Dateien zu durchsuchen, welches ein definiertes Wort, einen Buchstaben im Namen oder über eine gewisse Größe verfügt zu durchsuchen.
Das zu durchsuchende Verzeichnis muss Veränderbar sein und das Skript muss die gefundenen Dateien dann auch auslesen können und das zwar so, das am Ende eine Textfile generiert wird, in welchem der Name, Speicherstandort, Größe in Kb
sowie Besitzer, Gruppe, Berechtigungen und Symbolische Verknüpfungen ausgegeben werden.


Beispielergebniss :

Beispieldatei1 / Home/Documents/Sammelarchiv/Müll/ 2836Kb / Admin/ Administrator / Admin-Read&Write/Benutzer2-ReadOnly/ Symbolische Verknüpfung


Skript2

Beschreibung:

Das Skript soll so aufgebaut werden, dass es einen Suchmodus enthält, welcher zudem so eingestellt werden kann, dass er entweder nach einem Ergebnis oder nach der Anzahl der Ergebnisse sucht.
Des weiteren soll man einen Filter einstellen können, bei dem man entscheiden kann, ob man nur den Namen, die Größe etc. sehen möchte.

Die Eingabe Datei wird über das Skript 1 erzeugt.

Aufrufssyntax
such-indatei [-s] <eingabedatei> <regulärerausdruck> <filter> [<filter>*]

Beispiel zu Script 2

Beispielaufruf

Beispielsuche nach Buchstaben
such-verzeichnis /testverzeichnis a
Beispielsuche nach Namen
such-verzeichnis /testverzeichnis name
Beispielsuche nach Grösse
such-verzeichnis /testverzeichnis 2

Sucht nach allen Dateien die genau 2 Kilobyte gross sind.
such-verzeichnis /testverzeichnis +2

Sucht nach allen Dateien die genau 2 Kilobyte oder grösser sind.
such-verzeichnis /testverzeichnis -2
Beispielergebnis
Beispielsuche nach Buchstaben
name pfad groesse Rechte Eigentuemer Gruppe Symlink
name1 /testverzeichnis 1 rwxrwxr-x root root
name2 /testverzeichnis 2 rwxrwxr-x root root yes
name3 /testverzeichnis 3 rwxrwxr-x root root
testa4 /testverzeichnis 4 rwxrwxr-x root root
Beispielsuche nach Namen
name pfad groesse Rechte Eigentuemer Gruppe Symlink
name1 /testverzeichnis 1 rwxrwxr-x root root
name2 /testverzeichnis 2 rwxrwxr-x root root yes
name3 /testverzeichnis 3 rwxrwxr-x root root
Beispielsuche nach Grösse
name pfad groesse Rechte Eigentuemer Gruppe Symlink
name2 /testverzeichnis 2 rwxrwxr-x root root yes

Vielen Dank schonmal im Voraus!!!! face-smile

Content-ID: 191197

Url: https://administrator.de/contentid/191197

Ausgedruckt am: 22.11.2024 um 11:11 Uhr

Alchimedes
Alchimedes 13.09.2012 um 15:41:37 Uhr
Goto Top
Hallo,

'man find' ist Dein freund.
Oder glaubst Du hier bekommst Du fertig scripte?

Gruss
Lucas-O
Lucas-O 13.09.2012 aktualisiert um 15:56:55 Uhr
Goto Top
nein aber wenigstens ein paar Hilfestellungen face-smile bastle seit 14 tagen an dem script und ich habe eigentlich nur noch 2 Probleme:

1. Wie definiere ich einen Befehl?
2. Wie lese ich etwas aus einer .txt Datei aus face-smile

Und ansonsten Brauch ich "einfach" Lösungsmöglichkeiten um es zu Optimieren.
Ein ganzes Script zu benutzen wäre langweilig und man lernt nix...
Viele Grüße Lucas

ps: Würde mich freuen, wenn es bei hilfreichen Antworten bleibt.
ColdZero89
ColdZero89 13.09.2012 um 15:57:32 Uhr
Goto Top
Moin,

Lucas wir können in keine Kristallkugel gucken um zu sehen wie weit du bist.

Sonnvoll wäre denn du dein Script hier einmal Postest damit wir sehen WAS du gemacht hast und ob du wirklich was gemacht hast. Denn vorkauen tun wir hier ungerne.

Dein Script packst du dann noch in < code> < /code> (Ohne Leerzeichen), dann sieht es auch schön aus und übersichtlich.

Dann erfährst du auch hier sicherlich mehr Hilfe.

Gruß Zero
Lucas-O
Lucas-O 13.09.2012 aktualisiert um 16:17:16 Uhr
Goto Top
Ja natürlich entschuldige also hier (vorletzter Entwurf and dem aktuellen schreib ich grad noch)
(brauche nur noch hilfe beim 2.):

#!/bin/bash

PFAD="/atix/projects/azubis/ae"  



zaehlen() {
        anzahl=0
        for file in "$PFAD"/* ; do  
        ls "$PFAD"  
        anzahl=$(( $anzahl+1 ))
        done
        echo -e "Es sind $anzahl an dateien und ordner in $PFAD \n"  
}

file () {
        for file in "$PFAD"/* ; do  
        echo $file  
        done



}
echo -e "\n  
                Bitte Suchart,Begriff,Pfad und Filter folgendermassen eingeben: \n
        such-verzeichnis [-s] <eingabedatei> <regulaererausdruck> <filter> [<filter>*] \n \n"  
read anfrage
#...bis hier bin ich und arbeite grad

zaehlen
file
Alchimedes
Alchimedes 13.09.2012 aktualisiert um 16:13:45 Uhr
Goto Top
Hallo,

ein Befehl definierst Du in den Du Ihn ins Terminal ( oder in Dein script)kloppst.

z.B mit cat / less / more kannst Du aus einer .txt Datei lesen.

Sehe in Deinem Script nicht wo Du $PFAD definiert hast.


Gruss
Lucas-O
Lucas-O 13.09.2012 aktualisiert um 16:25:47 Uhr
Goto Top
Hi,
wie reinkloppen?? (bin noch ziehmlich neu)
und hat bis jetzt nicht funktioniert, weil ich nicht weiß, wie ich den Befehl so speichere,
dass ich ihn dann aufrufen kann.
danke für das mit dem cat (wäre das so richtig?
 

file () {
        for file in "$PFAD"/* ; do  
        echo $file
                done
}
cat test.txt
)

Gruss Lucas

ps: muss ich bei dem cat Befehl einen Pfad angeben oder reicht ein */ platzhalter?

pps: So $PFAD ist jetzt drin, ist beim kopieren verloren gegangen.
Alchimedes
Alchimedes 13.09.2012 um 16:17:36 Uhr
Goto Top
hallo,

also Dein script hast Du erstellt und abgespeichert.
Aufrufen kannst Du es direkt dort wo Du es gespeichert hast
im Terminal mit ./deinscriptname denk aber dran das es Ausfuehrbar gemacht
werden muss fuer den User also: chmod u+x deinscript.

Willst Du das dann taeglich zur gleichen Zeit ausgefuehrt haben muss Du
einen cronjob dafuer anlegen.

Gruss
Lucas-O
Lucas-O 13.09.2012 um 16:21:08 Uhr
Goto Top
hi,

ja ausführbar ist es schon und es funktioniert auch schon soweit.
Dass mit den Rechten habe ich auch schon erledigt.
Was ich vorher meinte ist, wie kann ich machen, dass mein Script den Befehl, den man eingibt erkennt und weiß, was es damit machen muss.

gruss
Alchimedes
Alchimedes 13.09.2012 um 16:29:44 Uhr
Goto Top
Hallo,

das kannst Du mittels read .

zB: echo "Bitte tippen Sie hier was ein: "
read A
echo $A


http://linuxint.com/DOCS/Linux_Docs/openbook_shell/shell_007_002.htm

Ist eh ein Klassiker unter den Shellscript Buecher sehr zu empfehlen.


Gruss
Lucas-O
Lucas-O 13.09.2012 um 16:35:33 Uhr
Goto Top
Hi,

ja das problem ist, dass das Script einen nur einmal was fragen soll, und dass ist, wenn man den Befehl eingibt.
Außerdem soll es den Suchpfad und den namen bzw. den suchparameter und den filter aus dem Befehl heraus erkennen. (Beispiel: such /atix/home A [-l]) (das -l soll den buchstaben filter aktivieren...)
Das Buch ist sehr gut und deswegen habe ich es auch gekauft und es liegt neben mir ^^.

Gruß
Alchimedes
Alchimedes 13.09.2012 um 16:45:53 Uhr
Goto Top
Hallo,

dann schau mal in das Buch Kapitel 3.8 !!

Gruss
Lucas-O
Lucas-O 13.09.2012 um 16:49:18 Uhr
Goto Top
Hi,
Ah danke ich les mir das schnell mal durch, versuch es zu verstehen und dann melde ich mich wieder. face-smile
gruß
Lucas-O
Lucas-O 13.09.2012 aktualisiert um 17:05:14 Uhr
Goto Top
Hi,
so... dass ist ja schonmal gut aber ich bin grad auf nochwas gestoßen...
sagt dir $@ $# $1 $2 ... was???
(das mit dem getopt habe ich noch nicht ganz verstanden bin grad am ausprobieren)
gruß
Alchimedes
Alchimedes 13.09.2012 aktualisiert um 20:56:02 Uhr
Goto Top
Nabend,

klar sagt mir das was face-smile
Kommandozeilen Parameter...

Kapitel 3

Vieleicht solltest Du das Buch von Anfang bis Ende durcharbeiten.
Es wird Dich wenn Du durchhaelst sehr weit nach vorne bringen... zum shellscript GURU face-smile

Aber dafuer musst Du in dem IT-Umfeld auch immer wieder mit der Thematik konfrontiert werden.
Nicht das es Dir wie mir ergeht der nur Oberflaechenwissen hat und (){ :|:& } ;: nicht erklaeren kann warum
hier immer wieder neue Prozesse gestartet werden und dann die Linuxmoehre zum absturz bringt.

Falls Du das zum testen ausfuehren willst limitiere die Anzahl der erlaubten Prozessanzahl !!


Gruss
Lucas-O
Lucas-O 13.09.2012 um 22:42:04 Uhr
Goto Top
Guten Abend,
1. Ja ich bin grad wieder dabei, dass Buch durchzuarbeiten, da beim alleinigen durchlesen nicht gaaanz soviel hängen geblieben ist ^^

2.Ja ich werde damit wahrschinlich öfters konfrontiert werden(wäre komisch wenn nicht), da ich eine Ausbildung zum Fachinformatiker für Anwendungsentwicklung angefangen habe.
3. Ich habe mir jetzt 12 bücher zum thema bestellt face-smile da es mir ja auch spaß macht

ok danke für den tipp

Vielen dank bis hierher und ansonsten viele grüße aus München face-smile
Alchimedes
Alchimedes 13.09.2012 aktualisiert um 23:16:31 Uhr
Goto Top
Nabend,

das Buch gibt ja schon ne menge Input... 12 weitere Buecher?? Lesen alleine wird Dir nicht helfen.. ich hab hier rund
200 Buecher uber Computer Themen rumstehen.. Man denkt wenn man sich ein Buch kauft bekommt man auch das Wissen sofort vermittelt..
nur wenn ich auch in der Praxis dieses Wissen brauchte oder wollte !! haben mir die Buecher geholfen.

Auswendig lernen? Bloedsinn..

Es gilt learning by doing, etwas nicht wissen.. dann manpage, oder tante google..

Was Dein Script angeht:
warum benutzt Du nicht den find befehl ? damit kannst Du via -mtime oder -ctime oder .. oder .. genau nach Deinen
geaenderten Dateien suchen? Nen Einzeiler...

Gruss und Dir alles gute fuer Deinen Informatikerlebensweg !

P.S: http://www.pronix.de/pronix-1.html
Lucas-O
Lucas-O 14.09.2012 um 08:34:32 Uhr
Goto Top
Morgen,

find kann ich nich benutzen weil ich irgendwie keine
Rechte dafür habe...
Ja das mit dem learning by doing mach ich ja schon...

Gruss und danke für die Glückwünsche^^

ps: danke für den Link
Alchimedes
Alchimedes 14.09.2012 aktualisiert um 13:47:20 Uhr
Goto Top
Hallo,

das kann nicht sein... Was Du an Fehlermeldung bekommst kannst Du ja ins nirwana schiessen.

find /DeinPfad -name 2<&1


aehm besser ... find /DeinPfad -name 2</dev/null


Gruss
Lucas-O
Lucas-O 16.09.2012 um 17:18:18 Uhr
Goto Top
HI,

das funktioniert leider auch nicht. Hast du evtl. noch ein paar denkanstöße für
mich wegen dem script?? face-smile

Gruß Lucas