PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage zu meinem 1. Bashscript...



d@tenmaulwurf
08-01-2004, 14:28
Moin!

Von vorne weg: Voller Newbie :)

Was muss ich machen, damit das Script funktioniert?

Script:
-------------
echo $x
-------------


Starten des Scripts:
-------------
./script -x=Hallo
-------------

Wie läuft das in der Shellprogrammierung ab?
was muss ich machen damit das so in etwas funzt?

THX im voraus,

d@tenmauöwurf

phate
08-01-2004, 14:41
Hi d@tenmaulwurf,

willkommen auf mrunix.de.
Wie läuft das in der Shellprogrammierung ab?
was muss ich machen damit das so in etwas funzt?Damit sowas funktioniert sollte man sich - wie bei allen Dingen - mit den Grundlagen auseinandersetzen. Ein paar Anlaufstellen finden sich in der Signatur von fork. Schaue Dir dazu seinen letzten Beitrag unter http://www.mrunix.de/forums/showthread.php?s=&postid=150316#post150316.

Zu Deinem konkreten Problem: Was Du suchst ist eine Möglichkeit zur Parameterübergabe in ein Bash-Skript.
Dazu kannst Du getopts verwenden. Unter den o.g. Anlaufstellen sollte sich dazu was finden lassen.

d@tenmaulwurf
08-01-2004, 15:00
THX, abba das ist zu hoch für mich :(
Kannst du mir evtl. einen konkreten Lösungsansatz geben?
Oder geht das überhaupt so wie ich mir das vorstelle?

PS: In PHP geht das ;)

phate
08-01-2004, 15:36
Klar geht das. Beweis nachfolgend:
#!/bin/bash

while getopts x: option;do
case $option in
x) x=$OPTARG
;;
esac
doneAufgerufen wird das Ganze mit
./skript -x ParameterDer übergebene Parameter befindet sich nach Abarbeitung des obigen Code-Fragments in der Variable x des Skripts.


Um das ganze ein wenig verständlicher zu machen eine Erklärung zur Arbeitsweise.
while getopts x: option;doIn diesem Schleifenkonstrukt veranlasst man das Auswerten der Kommandozeilenparameter. Das Kernstück dabei ist 'getopts <liste>' variable'. In Liste gibt man die Buchstaben der Skript-Parameter an, welche zu erwarten sind. Dabei wird zwischen Optionen und Parameter-behafteten Optionen unterschieden. Für einfache Optionen (z.B. -x ohne Parameter) landet der Buchstabe der Option in der Liste, wird ein mit der Option verbundener Parameter erwartet dann muss man dem Buchstaben zustätzlich einen Doppelpunkt anfügen. getopts wertet sodann mit jedem Durchlauf der while-Schleife eine übergebene Skript-Option aus und weißt die jeweils aufgefunde Option der Variable $option zu. Sind keine weiteren Optionen mehr vorhanden, bricht die while-Schleife ab.
case $option in
x) x=$OPTARG
;;
esacInnerhalb der while-Schleife wird der in der Variable $option enthaltene Buchstabe mit einem case-Konstrukt überprüft. Das ist das Bash-Pendant der PHP-switch-Anweisung. Wird in $option also der Buchstabe x vorgefunden, wird die Anweisung x=$OPTARG ausgeführt.
In $OPTARG befindet sich der mit einer Option verbundene Parameter, insofern in der Listen-Deklaration von getopts ein Doppelpunkt nach dem entsprechenden Options-Buchstaben steht. Somit wird ein mit der Option -x an das Skript übergebener Parameter an die Variable $x übergeben.


Alle Klarheiten beseitigt? ;)

Schau Dir wie gesagt mal die Links von forks Signatur an, da finden sich die entsprechenden Grundlagen.

fork
08-01-2004, 18:25
Ist das 'ne Hausaufgabe? Von alleine kommt man als Neuling nämlich nicht drauf so etwas zu schreiben, bzw. mit so etwas so anzufangen.

aber auf einfache Weise gehts auch mit Variablen:

meinprogramm.sh:
#!/bin/bash
echo $variableAufruf:
variable=meinWert ./meinprogramm.sh

d@tenmaulwurf
09-01-2004, 09:09
Oh, THX! Iss genau das was ich suche...

Wie ich darauf komme?
Habe n CD-Wechsler den ich mit dem programm eject ansprechen muss.

Das läuft dann immer so ab:

umount /mnt/cdwechsler
eject -c [1-6]
mount /mnt/cdwechsler
cd /mnt/cdwechsler

Deshalb:

cd=[1-6] ./script

Iss einfach einfacher ;)

Nochmal THX an alle die mir geholfen haben, besonders fork,

d@tenmaulwurf

d@tenmaulwurf
09-01-2004, 12:46
Könnte ich dem ganzen jetzt noch ne grafische Oberfläche geben?
Was eignet sich dafür am besten?
Ruby, Python...

Es soll ganz einfach sein, in der Art:
onCLickaufEinenButton:mount /das/und/das

mwanaheri
09-01-2004, 13:23
Geschmackssache. Ich bevorzuge ruby, aber du kannst es machen mit was du willst. Letztlich ruft das ja nur das script auf, da brauchst du nicht mehr viele Zeilen für die Graphische Oberfläche.

fork
09-01-2004, 14:00
KDE -> Desktop -> Rechtsklick -> Neues Gerät ?

d@tenmaulwurf
11-01-2004, 16:28
Habe mich mal erkndigt mit Ruby und co...
Aber wie rufe ich aus Ruby oder Python ein Bash-Script auf?
Also wie müsste der Code aussehen;
wenn ich auf einen Button klicke wird das Script xyz ausgeführt.

THX nochmal (und für eure Geduld mit mir ;)),

d@tenmaulwurf

mwanaheri
11-01-2004, 19:31
bei ruby:

system("befehl")

Du kannst also in einem Ruby-Programm mit

ergebnis = system("ls")
print ergebnis

ruby anweisen, den Befehl ls auszuführen, das Ergebnis in der Variablen ergebnis zu speichern und dann auszudrucken.

Wenn du das graphische Toolkit FXruby benutzt, wäre das etwa so:

require 'fox'
include Fox
$programm = FXApp.new('Starter',"you")
$hauptfenster = FXMainWindow.new($programm,"starter")
myButton = FXButton.new($hauptfenster,"start")

myButton.connect(SEL_COMMAND){system("dein Script")}

$programm.create
$hauptfenster.show
$programm.run