ubuntuusers.de

Ausgabe von blkid, angezeigte Partitionen jeweils in eine Variable schreiben

Status: Gelöst | Ubuntu-Version: Kubuntu 9.10 (Karmic Koala)
Antworten |

johnyff

Avatar von johnyff

Anmeldungsdatum:
8. Januar 2007

Beiträge: 1186

Ich möchte die Ausgabe von blkid in Variablen schreiben lassen

z.B. blkid zeigt mir z.B. Folgendes an:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
blkid -o device
/dev/sda1
/dev/sda5
/dev/sda6
/dev/sda7
/dev/sda8
/dev/sda9
/dev/sdb1
/dev/sdb2
/dev/sdb3
/dev/sdb5
/dev/sdb6
/dev/sdb7
/dev/sdb8
/dev/sdb9
/dev/sdb10
/dev/sdb11
/dev/sdb12
/dev/sdb13
/dev/sdb14
/dev/sdc5

ich möchte das alle angezeigten Partitionen in Variablen geschrieben werden:

sdb1="/dev/sdb1"
sdb2="/dev/sdb2"
sdb5="/dev/sdb5"

usw um es dann in einer Frage zu packen:

Welches Laufwerk soll benutzt werden?

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Ja, und ... ?

Wie Du das in Variablen schreibst hast Du doch schon selber geschrieben !?
Was ist jetzt Dein Problem ?

Welches Laufwerk Du benutzt hängt doch davon ab was du weiter vor hast.
Und natürlich, was auf welcher Partition drauf ist.

Überhaupt hast Du ein bisschen ganz viele Partitionen ...

track

evilwm

Avatar von evilwm

Anmeldungsdatum:
10. August 2009

Beiträge: 38

Ohne zu wissen was genau du bezweckst, bietet folgender Vorschlag eine dynamische Möglichkeit die Ausgabe von blkid zu speichern.

1
2
3
4
5
6
#!/bin/bash
n=0
for d in $(blkid -o device); do
  deviceNodes[$n]=$d
  let "n += 1"
done

Dadurch hast du dann ein mit Array, das ab dem Index 0 die Zeilen deiner Rückgabe beinhaltet.

Edit: Ich vermute, du möchtest das darauf folgend als Ausgabe für eine Benutzerinteraktion verwenden. Dafür wäre dieser Weg geeignet.

johnyff

(Themenstarter)
Avatar von johnyff

Anmeldungsdatum:
8. Januar 2007

Beiträge: 1186

track schrieb:

Überhaupt hast Du ein bisschen ganz viele Partitionen ...

Ich habe 3 Festplatten angeschlossen, ich nutze aber nur 5 Partitionen in meinen Kubuntusystem, die anderen Partitionen sind zum testen anderer Linuxsysteme

@evilwm, schon mal vielen Dank für deine Hilfe.

Ich habe für mich fsarchiver entdeckt und sichere meine Partitionen damit und dafür habe ich mir ein Script gebastelt, der u.a. abfragt welche Partition gesichert werden soll, da ich schreibfaul bin, will ich statt "/dev/sda1" einfach nur "sda1" eingeben

1
2
echo -n  "Welche Partition / Ordner soll wiederhergestellt/gesichert werden?"
read dev

Aber im Moment komme ich mit dein Code nicht viel weiter, wenn ich

1
echo $d1

eingebe, bleibt die Zeile leer, toll wäre wenn das Script vorher ausgibt, welche Variable für welches Laufwerk steht:

1
2
$d2 /dev/sda1
$d1 /dev/sda2

usw

Edit=Das habe ich jetzt mit rumexperimentieren hinbekommen

1
2
3
4
5
6
7
n=0
for d in $(blkid -o device); do
  dev[$n]=$d
  let "n += 1"
export dev$n=$d
echo dev$n=$d
done

Erhalte meine gewünschte Ausgabe

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
dev1=/dev/sda1
dev2=/dev/sda5
dev3=/dev/sda6
dev4=/dev/sda7
dev5=/dev/sda8
dev6=/dev/sda9
dev7=/dev/sdb1
dev8=/dev/sdb2
dev9=/dev/sdb3
dev10=/dev/sdb5
dev11=/dev/sdb6
dev12=/dev/sdb7
dev13=/dev/sdb8
dev14=/dev/sdb9
dev15=/dev/sdb10
dev16=/dev/sdb11
dev17=/dev/sdb12
dev18=/dev/sdb13
dev19=/dev/sdb14
dev20=/dev/sdc5

Nun möchte ich daran anschließend meine Frage stellen und auslesen und dabei habe ich ein Problem. Hiermit habe ich es bis jetzt versucht

1
2
3
echo -n  "Welche Partition / Ordner soll wiederhergestellt/gesichert werden?"
echo
read device && echo \$$device

evilwm

Avatar von evilwm

Anmeldungsdatum:
10. August 2009

Beiträge: 38

Die Variable d wird nur benutzt, um die zuletzt ausgegebene Zeile temporär zus peichern.

deviceNodes (der Name ist jetzt egal) speichert alle Zeilen.

Du musst also anstatt

1
echo $d1
1
echo ${deviceNodes[1]}

verwenden. Das würde dir die zweite Zeile zurückgeben.

Hier das "Skript" angepasst, damit es die Positionen der Partitionen innerhalb deviceNodes angibt und die gewählte Partition ausgibt. Damit kann immer nur _eine_ Partition gewählt werden. Die Eingabe wird nicht geprüft, auch nicht ob die Position im Array überhaupt existiert.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
#!/bin/bash
n=0
echo "Uebersicht aller Partitionen im System"
for d in $(blkid -o device); do
        deviceNodes[$n]=$d
        echo "Position $n -> Partition $d"
        let "n += 1"
done

echo -n "Bitte gebe die Zahl zur Partition an: "
read userInput

# das gewaehlte device
echo ${deviceNodes[$userInput]} # die {} sind zwingend notwendig, damit die Bash die Variable als Array auswertet.

johnyff

(Themenstarter)
Avatar von johnyff

Anmeldungsdatum:
8. Januar 2007

Beiträge: 1186

Vieeeeeeeelen Dank, das funktioniert super.

Antworten |