staging.inyokaproject.org

Problem mit einer Variablen

Status: Gelöst | Ubuntu-Version: Ubuntu 20.04 (Focal Fossa)
Antworten |

robin_b

Anmeldungsdatum:
17. April 2020

Beiträge: 11

Hallo,

ich möchte mit einem Bash-Skript überprüfen ob die neuste Version einer Software installiert ist. Dafür Frage ich die aktuell installiere Software ab und schreibe die Version in eine Variable. Anschließend wollte ich diese mit der aktuellen des Herstellers Vergleichen, hier wurde mir allerdings immer "ungleich" angezeigt, obwohl in den Variablen offensichtlich das selbe drin steht.

Wenn ich die Variable einfach per Echo ausgebe, bekomme ich folgende Ausgabe: 3.12.1 (so soll es auch sein) Wenn ich dann aber eine Datei mit Hilfe der Variablen erstelle (touch $version), dann heißt die Datei komischerweise folgendermaßen:

1
''$'\r''3.12.1'

Woher kommen die ganzen Zeichen da drum herum, und wie kann ich diese raus bekommen, damit ich wirklich nur die Versionsnummer in der Variablen drin stehen habe? Habe schon alles Mögliche ausprobiert, aber komme einfach nicht weiter..

Vielen Dank Robin

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17630

Wie befüllst Du denn die Variable. Zeig doch das Skript bzw. einen relevanten Ausschnitt, mit dem sich das Problem nachstellen lässt.

robin_b

(Themenstarter)

Anmeldungsdatum:
17. April 2020

Beiträge: 11

Also ich bekomme von dem Server per Telnet folgende Ausgabe in die temp.txt Datei:

telnet> Trying XXX.XXX.XXX.XXX...
Connected to XXX.
Escape character is '^]'.
TS3
Welcome to the TeamSpeak 3 ServerQuery interface, type "help" for a list of commands and "help <command>" for information on a specific command.
error id=0 msg=ok
error id=0 msg=ok
version=3.12.1 build=1585305527 platform=Linux
error id=0 msg=ok

Hiervon benötige ich nur die Zeile mit der Version, daher mache ich im Skript folgendes:

1
2
3
sed -i -n '8p' temp.txt
sed -i -e 's/\ .*//' -e s/"version="//g temp.txt
version=$(cat temp.txt)

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

robin_b schrieb:

Also ich bekomme von dem Server per Telnet folgende Ausgabe in die temp.txt Datei:

telnet> Trying XXX.XXX.XXX.XXX...
Connected to XXX.
Escape character is '^]'.
TS3
Welcome to the TeamSpeak 3 ServerQuery interface, type "help" for a list of commands and "help <command>" for information on a specific command.
error id=0 msg=ok
error id=0 msg=ok
version=3.12.1 build=1585305527 platform=Linux
error id=0 msg=ok

Basierend darauf kann ich noch keinen Fehler finden. Am bestem postest Du mal den Inhalt von temp.txt als Attachment, damit wir das unverfälscht sehen können. Möglicherweise ist auch nc das bessere Tool als telnet.

Hiervon benötige ich nur die Zeile mit der Version, daher mache ich im Skript folgendes:

1
2
3
sed -i -n '8p' temp.txt
sed -i -e 's/\ .*//' -e s/"version="//g temp.txt
version=$(cat temp.txt)

Das würde ich ganz anders machen:

1
version=$(sed -n 's#^.*version=\([0-9.]\+\).*$#\1#p' temp.txt)

Während Dein Skript "negativ" arbeitet, also alles wegschneidet, das Du nicht brauchst, geht mein Skript positiv vor, d.h. extrahiert nur genau das, was Du willst. Das ist m.E. etwas robuster bei Änderungen, weil Dein Ansatz z.B. schon schief geht, wenn vor "version" ein Leerzeichen auftaucht.

robin_b

(Themenstarter)

Anmeldungsdatum:
17. April 2020

Beiträge: 11

rklm schrieb:

Das würde ich ganz anders machen:

1
version=$(sed -n 's#^.*version=\([0-9.]\+\).*$#\1#p' temp.txt)

Während Dein Skript "negativ" arbeitet, also alles wegschneidet, das Du nicht brauchst, geht mein Skript positiv vor, d.h. extrahiert nur genau das, was Du willst. Das ist m.E. etwas robuster bei Änderungen, weil Dein Ansatz z.B. schon schief geht, wenn vor "version" ein Leerzeichen auftaucht.

Das hat tatsächlich ausgereicht, jetzt habe ich genau das was ich wollte, danke dir!

Antworten |