ubuntuusers.de

bash scripting mit dictonary oder ähnlichen

Status: Gelöst | Ubuntu-Version: Xubuntu 24.04 (Noble Numbat)
Antworten |

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17664

Wohnort: Berlin

Anfangs hieß es: name1=aaa, name2=bbb, name3=ccc u.s.w.

Wenn usw. hier für name4 und name5 gestanden hätte, dann wäre das ja eher was für name=(aaa bbb ccc), ein Array und von einem etwas erfahreneren Programmierer in die Frage eingeflossen. Es sollte wohl, wie später das Beispiel mit Name, Alter und Wohnort zeigt, aber einfach nur eine Abstraktion vom konkreten Variablennamen sein, wie auch die Werte.

Einen Anfänger auf Json und jetzt noch SQLite anzusetzen scheint mir mehr mit den aktuellen Problemen derer, die antworten, zu tun zu haben, als mit der Frage.

Ja, und in einer Oracle-Datenbank kann man Javacode in Tabellenfeldern speichern - damit kann man vielleicht dolle Sachen machen!

Ich neige dann doch zum Ansatz "The simplest thing than can possibly work". Wenn keine Leerzeichen in den Werten vorkommen, dann ist es super simpel.

matze31

(Themenstarter)

Anmeldungsdatum:
25. Oktober 2015

Beiträge: 821

Ich hab mich im Eingangspost etwas falsch ausgedrückt. Es geht darum verschiedene keys und verschiedene Werten zu erstellen, in einer Datei zu speichern um Später wieder abzurufen. Auch soll es iterierbar sein. in Python hab ich so etwas mit "json" gemacht.

juribel

Anmeldungsdatum:
20. April 2014

Beiträge: 1320

user_unknown schrieb:

Einen Anfänger auf Json und jetzt noch SQLite anzusetzen scheint mir mehr mit den aktuellen Problemen derer, die antworten, zu tun zu haben, als mit der Frage.

Was soll DAS denn jetzt hier ???

juribel

Anmeldungsdatum:
20. April 2014

Beiträge: 1320

Nur zur Demonstration, dass SQLite kein Hexenwerk ist ☺

sqlite3 test.sqlite 'create table bundeskanzler ( name varchar(40), vorname varchar(40) )'
sqlite3 test.sqlite 'insert into bundeskanzler values ( "Merz", "Friedrich" )'
sqlite3 test.sqlite 'select * from bundeskanzler'

In dem ersten Shell-Befehl wird eine leere Tabelle "bundeskanzler" mit zwei Spalten angelegt und in der Datei (der Datenbank) "test.sqlite" gespeichert.

Mit dem zweiten Befehl wird ein Datensatz geschrieben.

Zeile drei schliesslich gibt alle Sätze der Tabelle aus.

Der Befehl

sqlite3 test.sqlite '.dump'

schliesslich gibt die interne Struktur der Datenbank als SQL-Anweisungen aus.

Das ist jetzt nur ein absolutes Primitiv-Beispiel, aber da es sich bei SQLite um eine echte relationale "zero configuration" Datenbank handelt, gibt es dank SQL-Sprache schier unendliche Möglichkeiten. Nicht umsonst wird SQLite quasi überall benutzt: Smartphone, Browser, email-Programme. Man kann es per Befehl "sqlite3 Datenbankname 'SQL-Befehl'" in bash und in allen Programmiersprachen als Shell-Befehl aufrufen, es gibt aber auch (wenn man das will) für Perl, Python, C und viele andere Sprachen APIs, mit denen SQLite direkt eingebunden wird.

Vorteile: SQL ist seit vielen Jahrzehnten standardisiert, und mit wenigen einfachen Befehlen kann man schon viel erreichen.

Nachteil: SQLite ist nicht in den Installationsquellen enthalten und muss deshalb nachinstalliert werden, so etwas ist immer blöd, wenn man die Datenbanken weitergeben will.

Die Installation erfolgt mit

sudo apt install -y sqlite3 sqlitebrowser

wobei "sqlitebrowser" ein grafisches Frontend für SQLite ist, mit dem alle SQLite-Datenbanken angesehen oder geändert werden können.

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4773

Wohnort: Berlin

Nachteile von Schlüssel=Wert-Dateien die man einfach sourcet ist, dass die als Code ausgeführt werden. Damit kann man sich auch Namen im Skript überschreiben, die man nicht überschreiben wollte. Man muss auf Sonderzeichen aufpassen (und hier ist ein Leerzeichen schon ein Sonderzeichen). Und falls jemand böse Absichten und die Möglichkeit solche Datendateien zu ändern hat, kann der sehr einfach alles machen was mit den Rechten des Skripts möglich ist.

JSON und jq ist ein verbreitetes Datenformat und Werkzeug. Das ist mächtiger als eine einfache INI oder TOML Datei, also in gewisser Weise etwas überdimensioniert, aber für INI oder TOML gibt es AFAIK kein verbreitetes Werkzeug um das von Shell-Skripten aus zu verwenden. Alternative zu JSON wäre XML und xmlstarlet als Werkzeug.

Und dann gäbe es da noch die tollen Hilfsprogramme perl, python, oder ruby, mit denen man wirklich sehr viel machen kann. 😉

matze31

(Themenstarter)

Anmeldungsdatum:
25. Oktober 2015

Beiträge: 821

Ich hab auch schon überlegt, das mit Python zu machen, denn das wäre kein Problem mit json und co. Aber weil ich mehrere linux Befehle, die System Daten ausgeben sollen, im Script verwenden möchte, sollte man schon die bash (oder nicht?) nehmen. Aber ich werde es jetzt doch mit Python umsetzen.

Antworten |