Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
kleines shell script

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - Allgemein
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
oliver
Gast





BeitragVerfasst am: 02. März 2003 16:53   Titel: kleines shell script

also, da slackware nicht soviel mit automatisierung am hut hat, wollte ich ein kleines shell script basteln was mir das updaten/installieren etc. von slackware packages erleichtern soll:

#!/bin/bash
if [ ! -f /etc/suchepkg/CHECKSUMS ]; then
echo "First make pkg_update -update to update your checksums!"
else
cd /etc/suchepkg
export paket='grep $1.tgz CHECKSUMS'
fi

mein problem ist jetzt bei dem export paket...
weis da zufaellig grad wer die syntax damit er das annimmt?
danke im vorraus

oliver
 

Jochen
Gast





BeitragVerfasst am: 02. März 2003 18:53   Titel: Re: kleines shell script

Ich denke, statt der Apostrophe '' hattest Du die Backticks `` verwenden wollen. Wenn Du schon die bash verwendest, würde ich die alternative Schreibweise $() empfehlen. So wird aus der export-Zeile dann
code:

export paket=$(grep "$1\\.tgz" CHECKSUMS)

Der Punkt wird von grep übrigens als "genau ein beliebiges Zeichen" interpretiert werden und sollte daher wie o.a. entwertet werden. Es müssen aber zwei Backslashes sein, Weil die Shell noch eines entfernt (Backslash ist nun mal sowohl Sonderzeichen der Shell als auch der Regulären Ausdrücke).

Jochen
 

oliver
Gast





BeitragVerfasst am: 02. März 2003 20:52   Titel: Re: kleines shell script

hio,
es kommt zumindest kein fehler Smile
aber leider gehts nicht :/

oliver
 

Jochen
Gast





BeitragVerfasst am: 03. März 2003 11:10   Titel: Re: kleines shell script

Geht nicht gibt's nicht! Vor allem deswegen, weil es als "Fehlerbericht" etwas ungenau ist. Was willst Du denn genau erreichen? Aus dem Skript lässt sich nur ersehen, dass Du aus der Datei /etc/suchepkg/CHECKSUMS eine Zeile (mehrere Zeilen?) herausgreppen willst, in denen "<übergebener Paketname>.tgz" vorkommt und diese Zeile einer Variablen "paket" zugeordnet werden soll. Ob es das Skript so tut, kannst Du auch durch ein "echo $paket" nach der export-Zeile testen.

So weit, so gut. Und dann? Meine Kristallkugel ist leider zienlich trübe...

Aber wenn ich jetzt mal tippen müsste... Da Du explizit die Variable "paket" exportierst, willst Du sie entweder in einem untergeordneten Skript verwenden - was vollkommen OK ist - oder, wie es häufig missverstanden wird, an ein übergeordnetes Skript zurückgeben. Das funktioniert so nicht.

Aber mehr tippe ich erst, wenn Du mal den gesamten Zusammenhang klar gemacht hast: Zielsetzung, erwartetes Ergebnis, andere Skripte drum herum usw.

Jochen
 

oliver
Gast





BeitragVerfasst am: 03. März 2003 17:19   Titel: Re: kleines shell script

also,
ich habs nich so mit sh scripting, hab nur absolute basics drauf, deswegen hab ich ein paar scripts gebaut die mir die packetverwaltung unter slackware vereinfachen sollen...
einmal ein "suchepkg" - dass das paket sucht zb.:
suchepkg qt
dann soll zb. qt-3.1.1copy.tgz rauskommen
das soll dann sofort runtergeladen werden soll (deswegen mit export damit ich dann wget ftp://ftp.slackware.at/$paket machen kann).
 

Jochen
Gast





BeitragVerfasst am: 03. März 2003 19:50   Titel: Re: kleines shell script

Dann ist das Exportieren erst einmal überflüssig. Tipp mal in einer Shell
VAR=inhalt ; echo $VAR
ein, dass funktioniert schliesslich auch ohne Exportieren, nicht wahr? Setze Dein wget einfach hinten an das Skript dran!
code:
#!/bin/bash
if [ ! -f /etc/suchepkg/CHECKSUMS ]; then
echo "First make pkg_update -update to update your checksums!"
else
cd /etc/suchepkg
export paket=$(grep "$1.*\.tgz" CHECKSUMS)
fi

wget ftp://ftp.slackware.at/$paket


Probleme bei der Sache:
- Du hast keinerlei Fehlercheck da drinne. Wenn kein Treffer in der CHECKSUMS gefunden wird, ist $paket leer und wget wird Dir was husten.
- Das Format der CHECKSUMS-Datei ist mir nicht bekannt. Wenn da mehr als nur ein Dateiname pro Zeile drin steht, wird auch wieder bei wget ein so nicht existierender Dateiname zusammengesetzt.
- Was, wenn mehr als nur ein Treffer gefunden wird? Dann stehen alle Zeilen zusammen in $paket. Die müsste man einzeln bearbeiten, da sonst bei wget wieder die Syntax nicht eingehalten wird.
- Der Regexp bei grep muss anders aussehen. Wenn man mal annimmt, dass es reichen soll, den Anfang eines Paketnamens zu übergeben, dann mus wie o.a. noch ein ".*" eingefügt werden, da sonst nur der exakte Dateiname passen würde. (Beispiel: Bei Übergabe "qt" suchte Dein Skript nur nach "qt\.tgz", was nicht gefunden wurde. Statt dessen muss es nach "qt.*\.tgz" suchen, damit wie gewünscht auch "qt-3.1.1copy.tgz" gefunden wird.)

Da solltest Du Dir also noch mal Gedanken drüber machen...

Jochen
 

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Programmieren - Allgemein Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy