• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

2 Anfänger- Fragen zu Shellskripten

Hallo Leute,

habe gerade ein bisschen was zu Shellskripten gelesen. Leider sind bei mir noch ein paar Fragen offen, die ich mir auch durch googeln nicht beantworten konnte.

Die erste lautet: Wie schaff ich es ein Shell-Skript von der graphischen Oberfläche aus zu starten? Was ich meine: bisher kenne ich nur die Lösung "Code in einen Editor eingeben, Datei durch chmod +x ausführbar machen und dann von Konsole aus mit ./ Dateiname starten". Aber es gibt doch auch die Möglichkeit dass die Befehle durch anklicken der Datei, in welcher der Code gespeichert ist zu starten
( Die Text-Datei sieht dann auch anders aus). Wie macht man so etwas?

Die zweite Frage lautet: Kann man ein Shell-Skript schreiben das folgende Schritte enhält: Mozilla starten; kopete starten; Internet- Verbindung starten; surfe zu Seite x, surfe zu Seite Y...;
Ginge so etwas? Mir ist nämlich nicht klar, wie weit die Möglichkeiten eines Shell-Skriptes reichen, aber so weit ich weiß, kann so ein Shell- Skript fast alles machen.

Danke schon mal den Antwortern,
Gruß
 

taki

Advanced Hacker
Hallo.
Stell Dir ein Shellscript mal als Klebe zwischen den Programmen vor. Du rufst im Script einfach ein Programm auf und kannst diesem dabei noch ein par Parameter mitgeben.

Du must erst mal rausfinden, welche Konsolenbefehle die einzelnen Schritte erreichen. Dann "klebst" Du sie mit ein par Scriptzeilen zusammen.

Den Browser konqueror kannst Du z.B. mit
Code:
kfmclient openURL "www.woauchimmer.de"
aufrufen, damit wird dann gleich die entsprechende Seite geladen.

Bei den meisten Programmen unter Linux kannst Du Dir die möglichen Parameter mit --help ausgeben lassen. Ansonsten gibt es manpages.

KDE-Programme bieten oft noch mehr Möglichkeiten (DCOP). Aber damit würde ich mich erst später beschäftigen, wenn Du Dich beim Scripten schon etwas sicherer fühlst.
Gruß,
Andreas
 
A

Anonymous

Gast
Linux-Umsteiger schrieb:
Hallo Leute,

Die zweite Frage lautet: Kann man ein Shell-Skript schreiben das folgende Schritte enhält: Mozilla starten; kopete starten; Internet- Verbindung starten; surfe zu Seite x, surfe zu Seite Y...;
Ginge so etwas? Mir ist nämlich nicht klar, wie weit die Möglichkeiten eines Shell-Skriptes reichen, aber so weit ich weiß, kann so ein Shell- Skript fast alles machen.

Im LINUX (UNIX) gibt es hunderte von standartiesierten einzelnen Befehlen in denen man den Ausgang mit dem Eingang verbinden kann, sogenannte Filterkomandos, dazu noch tausende von Programmen und Scripten die oftmals mit einer Unzahl von Optionen ausgestatte sind.
Statt nun für jede noch so kleine Aufgabe ein neues Programm zu schreiben, verbindet man einfach die einzelnen Filterkommandos und Programme mit all ihren Optionen zu einem Script und verwendet sie einfach als fertige Bausteine. Dabei kann man mit einem Script ähnlich programmieren wie mit einer richtigen Programmsprache. Theoretisch kann man mit einem script alles machen da man ja andere Programme als Baustein einlagern kann, nur ist es nicht nicht unbedingt immer günstig. Einer der Hauptnachteile ist die relativ langsame Geschwindigkeit mit der ein Script abgearbeitet wird, das kann gegenüber einer ähnlichen Aufgabe in C Programmiert durchaus um mehrere 10Potenzen langsamer laufen.
Schau dich einfach mal hier im Club um, an der einen oder anderen Stelle sind kleinere und größere scripte und man kommt immer wieder ins Stauenen wie einfach manche Dinge mit Scripten erledigt werden können.

robi
 

taki

Advanced Hacker
Dazu fällt mir noch ein Schwank ein:
Bash-Scripting ist relativ einfach zu lernen, Ausführungsgeschwindigkeit mäßig. Das reicht für einfache Aufgaben.

Perl hat eine viel höhere Einstiegskurve, aber der Geschwindigkeitszuwachs ist schon bei einer exakten Umsetzung eines Scripts von der Bash- in die Perlsyntax enorm. Stellt man dann das Script noch so um, dass man die Stärken von Perl nutzt, ist es je nach Aufgabe fast so schnell wie ein kompiliertes Binärprogramm.

Es gibt es noch viele Zwischenschritte zwischen Shellscripten und binären Programmen. Andere Scriptsprachen als bash und Perl habe ich noch nicht ausprobiert. Wenn man neugierig genug ist, sollte man aber möglichst viele ausprobieren. Es lohnt sich. Je nach Aufgabe hat jede Sprache ihre Vor- und Nachteile.

Ich würde sagen, bei mir ist Perl die Einstiegsdroge. Jetzt wird Python angegangen (freevo ist übrigens eine Pythonanwendung).
 
OP
Linux-Umsteiger
Hallo an alle,

vielen dank erstmal für Eure Hilfe. Aber: was Shell-Skripts sind und was diese so machen, ist mir ja in etwa bewusst. Ich wollte eigentlich nur fragen, wie man ein Shellskript so speichert, dass alle in ihm enthaltenen Befehle durch einen Klick auf die txt-Datei, in welcher sich der Code befindet ausgeführt werden. Also ohne dass ich in die Shell gehen und dort ./ Programmname eingeben muss. So etwas kann man doch machen, oder habe ich da was vielleicht etwas falsch verstanden?

Danke für den Tip mit `--help`, gut so etwas zu wissen.

Mittlerweile frage ich mich, ob ich als Heimanwender überaupt Shell-Skripte benötige, irgendwie kommt mir das Ganze doch eher so vor, als ob es für Administratoren um einiges sinnvoller ist.... Aber ich mach demnächst eine Firma auf, da wird sich vielleicht die ein oder andere Anwendungsmöglichkeit für ein Shellskript schon bieten ( natürlich werden auch alle in der Firma zu Linux gezwungen) :twisted:

Mit Programmieren habe ich generell nur sehr sehr wenig Erfahrung; ich weiß zwar was Variablen, Strings, Schleifen usf. sind, habe aber so gut wie keine praktische Erfahrung damit ( außer ein bisschen mit libertybasic). Ich wollte jetzt mal aber versuchen mit Kylix die theoretischen Kenntnisse ein wenig in die Praxis umzusetzen. Mal schauen ob´s was wird...
 

oc2pus

Ultimate Guru
ja du legst eine Verknüpfung auf dem Desktop an.

rechte Maustaste - Neu erstellen - Verknüpfung zu Programm

in der Lasche "Programme", schreibst du deinen Aufruf von deinem script mit Pfad unt etwaigen Parametern rein.
 
OP
Linux-Umsteiger
Hallo oc2pus,

cool, vielen Dank, das war genau das, was ich wissen wollte. Nur bin ich leider auch für Deine klare Anweisung noch zu unfähig.

Ich habe Deine Anweisungen befolgt, aber wenn ich z.B. in das Shellscript einen Befehl eingebe a la ´cd /´ oder ´cd /home; cat Probe-Datei´ passiert überhaupt nichts!?!? Gebe ich aber z.B. mozilla in das Script ein, wird Mozilla ausgeführt, sobald ich das Shellscript anklicke.

Vielleicht könnte mir das jemand erklären? Ist auch wirklich die allerletzte Frage :oops: .....

Gruß
 

PC-Ulf

Member
Um Dein Skript auszuführen, mußt Du es im Path angeben.

Z.B. heißt Dein Skript hallo und liegt unter /home, dann gibst Du /home/hallo an, da Dein Skript wahrscheinlich nicht im Path liegt. Du arbeitest hier nicht mir Filterkommandos, leg alles was Du brauchst im Skript ab. Zudem muß das Skript natürlich auch eins sein, also ausführbar sein (mit ls /home/hallo -l sollte ein x für den Benutzer stehen).
 
OP
Linux-Umsteiger
Hi PC-Ulf,
ich denke, dass ich soweit alles richtig gemacht habe. Ich wollte eigentlich wissen, was ich ins Script schreiben muss, damit bei anklicken des ausführbaren Shell-Scriptes eine Shell aufgerufen wird, die dann einzelne Kommandos -die wiederum auch im Skript angegeben sind- ausführt.

z.B.: Ich will ein Script schreiben, das nach anklicken Mozilla ausführt; anschließend soll eine Shell aufgerufen werden; die Shell führt folgende Kommandos aus: ls | grep "a" | sort ; cd; cat schnuckipups; exit.

Wie löst man das Problem? Ich dachte so, dass ich in mein ausführbares Shell-Skript einfach folgendes eingebe:

Mozilla ; ls | grep "a" | sort ; cd; cat schnuckipups; exit

Anscheinend ist das aber nicht der Fall, denn wenn ich dann das Script anklicke, wird lediglich Mozilla aufgerufen mehr nicht. Hast Du vielleicht eine Idee, wie man das richtig macht?

Gruß
 
Moin Linux-Umsteiger,

ich drücke mich normalerweise auch immer wo es nur geht vor Shellskripten, aber dein Problem würde ich in der Art angehen, das ich den zweiten Teil in ein eigenes Skript stecke (dran denken die aufzurufende Shell anzugeben '#!/bin/bash') und dann einfach den mozillaaufruf und das Skript untereinander in ein neues Skript zu schreiben. Shellskripte führen normalerweise alle untereinander angegebenen Befehle nacheinander aus, ansonsten deine Teile einzelnd testen, nicht das ein Teil mit 'nem fehler aussteigt.
 
A

Anonymous

Gast
Wenn du ein script erstellst, cd irgendwohin; cat irgendwas und dieses script dann in einem Terminal ausführst, dann wird es auch die gewünschten Ausgaben machen, wenn du aber dieses Script über die KDE startest, dann wird das script natürlich auch genau das selbe machen, aber du wirst die Ausgabe sie nicht sehen, die wandert erst einmal in den großen Papierkorb /dev/null. Gehe noch mal mit der rechten Mautaste auf die Verknüpfung und auf Eigenschaften, Karteikarte Programme und dort auf Erweiterte Optionen und kreuze mal im Terminal starten an. Dann wird ein Terminal geöffnet auf dem die Ausgabe ausgegeben wird.
Jetzt wirst du für einen winzigen Augenblick deinen Ausgaben sehen, aber noch bevor du sie noch lesen kannst, ist das Fenster schon wieder zu. Also setze am Ende vom Script noch sleep 60 dann wartet das script 60 Sekunden bevor es das Fenster schließt.
Das script hier noch mal im Einzelnen
Code:
#! /bin/bash
cd /irgendwohin
cat irgend_eine Datei
sleep 60

( die erste Zeile sagt dem Rechner mit welchem Programm er das script interpretieren und ausführen soll)

robi
 
OP
Linux-Umsteiger
Hallo Geier0815,

So hätte (und habe) ich es ja auch gemacht, aber irgendwie ruft das Script nicht die Bash auf und schon gar nicht schreibt er die Kommandos da rein. Man sieht nur wie das Script krampfhaft versucht etwas auszuführen, es ihm aber nicht gelingt. Da ist doch etwas krumm... :?
 

regexer

Advanced Hacker
taki schrieb:
Andere Scriptsprachen als bash und Perl habe ich noch nicht ausprobiert.
Es gibt in der Unix-Welt mindestens noch zwei Erwähnenswerte Scriptsprachen:
1. awk:
Vorteil: Man kann davon ausgehen, dass ein sauber erstelltes awk-Script auf wirklich jedem Rechner läuft. Denn awk ist (man möge mir diesen Frevel verzeihen) ähnlich wie Latein eine tote Sprache, die sich Syntaktisch nicht mehr verändert und in IT-Maßstäben schon eine Ewigkeit besteht.
Nachteil: awk ist sehr langsam. Zudem sagte der Erfinder von Perl, Larry Wall, dass perl "semantisch gesehen eine echte Teilmenge von Perl ist". Oder anders: Perl macht awk überflüssig...
2. sed:
Ist einfach gesagt ein Editor, der sich per Script bedienen lässt.
Der Vorteil ist im Prinzip derselbe, wie bei awk. Doch lässt sich auch mit dem sed nichts machen, was man nicht auch mit perl machen könnte (behaupte ich mal).
 
Oben