ubuntuusers.de

Befehl in Variable speichern

Status: Gelöst | Ubuntu-Version: Ubuntu 11.04 (Natty Narwhal)
Antworten |

Mr.Frosch

Anmeldungsdatum:
29. September 2010

Beiträge: 124

Hey Leute,

ich verstehe es nicht, wiedermal gegoogelt und hier geschaut, aber keine Lösung gefunden. Nichtmal in dem Dicken FETTEN Buch neben mir >.<

Ich will in meinem script ein Befehl ausführen und die Ausgabe diese Befehls in einer Variable abspeichern. Doch wie es scheint erkennt der compiler meine Variablen nicht.

1
2
3
4
5
6
7
#!/bin/bash

DATEI = $(blkid | grep sdb)
echo $DATEI
echo oder eher so
DATEI2 = 'blkid | grep sdb'
echo $DATEI2

Und als Ausgabe bekomme ich:

./mount.sh: Zeile 3: DATEI: Kommando nicht gefunden.

oder eher so
./mount.sh: Zeile 6: DATEI2: Kommando nicht gefunden.

Dabei spielt es keine Rolle, ob ich das Script mit oder ohne sudo rechte ausführe. Ich merke nur, das wenn ich es mit sudo ausführe, das die externen Festplatten angesprochen werden.

Mein Ziel: Ein Script zu schreiben, was mir beim aufrufen eine gewünschte Festplatte mountet. Dazu will ich die UUID vergleichen. Gut möglich das es nicht die optimalste Möglichkeit ist, aber es ist die einzige die mir gerade einfällt.

Habt ihr eine Idee, was ich falsch mache?

LG Mr.Frosch

fckawe

Avatar von fckawe

Anmeldungsdatum:
23. April 2011

Beiträge: 509

Wohnort: Freiburg im Breisgau

Kann es sein, dass du als Ausgabe das falsche (nämlich nochmal dein Skript) reinkopiert hast? Oder war das doch Absicht und du bekommst tatsächlich diese Ausgabe?

Zur zweiten Variante: du verwendest wohl einfache Anführungszeichen - notwendig wären Backtics (Shift + Taste links neben Backspace und danach einmal Leertaste).

Gruß, Gerald

Vain

Avatar von Vain

Anmeldungsdatum:
12. April 2008

Beiträge: 2503

Servus,

die Sache mit den Backticks wäre ein Problem, ja. Trotzdem sollte man Backticks heutzutage ohnehin meiden. Das ist schlecht lesbar, schlecht verschachtelbar und Maskierung von Sonderzeichen mit einem Backslash ist unnötig kompliziert. Die Variante mit $(...) ist schon gut so.

Problem ist, dass du Leerzeichen um deine Gleichheitszeichen herum setzt. Das mag die Shell nicht.

1
foo=$(blkid | grep sdb)

(Und nicht vergessen, dass blkid ohne Root-Rechte nichts ausgibt.)

Mr.Frosch

(Themenstarter)

Anmeldungsdatum:
29. September 2010

Beiträge: 124

Danke für eure Antworten.

Das war ein Fehler meinerseits, das die Ausgabe gleich meinem Skript war. Nun ist es geändert.

@fckawe: Ja, du hast vollkommen Recht ☺

@Vain: Auch du hast recht, ist aber wirklich sehr schlecht, das die Leerzeichen da so wichtig sind. :-/

Ich setz es dann mal auf gelöst ☺ Danke

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Vielleicht solltest Du besser dem blkid- Befehl einen Parameter mitgeben, anstatt hinterher mit grep zu filtern:

datei=$(blkid /dev/sdb*)

Dann kann es nämlich kein "False Positive" geben, z.B. wenn mal ein USB-Stick den Label "sdb_kopie" haben sollte.

LG,

track

Mr.Frosch

(Themenstarter)

Anmeldungsdatum:
29. September 2010

Beiträge: 124

Ich verstehe was du meinst ☺

Nach 2 Tagen Schlaf sieht die Welt auch wieder ganz anders aus ☺

mein Script sieht im Moment so aus:

1
2
3
4
5
#!/bin/bash

DATEI=$(blkid -U AE0456E90456B455)
echo $DATEI
mount -U $Datei -t ntfs /mnt/Data

das Problem ist, das er jetzt nicht weiß, welches Dateisystem er mounten soll. Es gibt zwar nur eins, aber trotzdem muss ich ihm das ja noch mitteilen. Wenn ich allerdings noch den parameter -t ntfs mit einfüge kommt eine kleine Meldung, wie ich den den mount befehl richtig nutze.

Vain

Avatar von Vain

Anmeldungsdatum:
12. April 2008

Beiträge: 2503

Groß-/Kleinschreibung spielt bei Variablennamen eine Rolle. Den -t-Parameter solltest du nicht brauchen – ich habe den jedenfalls schon lange nicht mehr angeben müssen.

Mr.Frosch

(Themenstarter)

Anmeldungsdatum:
29. September 2010

Beiträge: 124

Man ist das Peinlich. Ich hatte mir vorher nur den Inhalt der Variable ausgeben lassen und hatte dort schon die Variable klein geschrieben. Dann hab ich die Zeile mit Mount noch dazu geschrieben und da mach ich schonwieder den selben fehler... ☹

Kann ich wenigstens froh sein, das ich das folgende als Ausgabe bekomme:

/dev/sdb1
mount: keine passende Partition gefunden

Quelltext ist noch der Selbe, bis auf eben der Variablenschreibfehler. ( einmal mit parameter -t und einmal ohne parameter -t getestet beidemal selbes ergebnis)

EDIT: Da ja nun das Thema doch ein wenig abschweift vom eigentlichen, ist vielleicht ein Mod so nett und passt den Titel an ☺ ich kann es leider nicht mehr.

Vain

Avatar von Vain

Anmeldungsdatum:
12. April 2008

Beiträge: 2503

Ähm, jetzt bin ich auch durcheinandergekommen.

1
mount -U deineuuid /mnt/foobar

Das sollte insgesamt reichen. mount kann direkt anhand der UUID mounten, du brauchst die also vorher nicht auflösen.

Mr.Frosch

(Themenstarter)

Anmeldungsdatum:
29. September 2010

Beiträge: 124

Was der Befehl alles kann ☺ Ok mit der Codezeile von dir funktioniert es ohne Probleme. Aber hätte nie gedacht das er das so ohne Probleme macht. Aber jetzt, wo ich feststelle das jede Partition eine eigene UUID besitzt ist das schon einleuchtender ☺ Danke für deine Hilfe ☺ Ich setze den Topic auf gelöst ☺

Antworten |