Re: bash Kommandozeile - Variable konvertieren
Kannst du das noch mal an die Liste schreiben suse-linux@suse.com? Sorry mein Fehler. Also ich glaub ich weiß was du machen willst, kannst du mal ein Beispiel machen ?!
Also ich lese per SOLLID=$(cat /tmp/avdownload/update.ini | grep "DATVersion" | cut -d "=" -f 2 | tail -n 1) die Versionsnummer aus. Leider hat diese am Schluß einen Zeilenumbruch und kann deshalb nicht per $SOLLID -lt $ISTID verglichen werden. Wie krieg ich den zeilenumbruch weg?
Von: Martin Hochreiter
Datum: Thu, 21 Jul 2005 15:36:46 +0200
Also ich lese per SOLLID=$(cat /tmp/avdownload/update.ini | grep "DATVersion" | cut -d "=" -f 2 | tail -n 1)
die Versionsnummer aus. Leider hat diese am Schluß einen Zeilenumbruch und kann deshalb nicht per $SOLLID -lt $ISTID verglichen werden.
Wie krieg ich den zeilenumbruch weg?
Häm wie meinst du das jetzt mit dem Zeilenumbruch ? Kannst du das mal näher erläutern ? Poste mal was in der Datei update.ini drin ist. Gruß Merenda -- GMX DSL = Maximale Leistung zum minimalen Preis! 2000 MB nur 2,99, Flatrate ab 4,99 Euro/Monat: http://www.gmx.net/de/go/dsl
Am Donnerstag, 21. Juli 2005 15:36 schrieb Martin Hochreiter:
Kannst du das noch mal an die Liste schreiben suse-linux@suse.com? Sorry mein Fehler. Also ich glaub ich weiß was du machen willst, kannst du mal ein Beispiel machen ?!
Also ich lese per SOLLID=$(cat /tmp/avdownload/update.ini | grep "DATVersion" | cut -d "=" -f 2 | tail -n 1)
die Versionsnummer aus. Leider hat diese am Schluß einen Zeilenumbruch und kann deshalb nicht per $SOLLID -lt $ISTID verglichen werden.
Wie krieg ich den zeilenumbruch weg?
Hallo, versuch mal folgendes: SOLLID=$(awk -F= '/DATVersion/ {VER = $2} END{print VER}' /tmp/avdownload/update.ini ) Somit musst du nicht 4 Programme bemühen. MfG Mario
Hallo,
versuch mal folgendes:
SOLLID=$(awk -F= '/DATVersion/ {VER = $2} END{print VER}' /tmp/avdownload/update.ini )
danke für eure bisherigen Hinweise, ich krieg leider nach wie vor die Fehlermeldung dass die Variable kein Integer ist ...
Am Donnerstag, 21. Juli 2005 16:07 schrieb Martin Hochreiter:
Hallo,
versuch mal folgendes:
SOLLID=$(awk -F= '/DATVersion/ {VER = $2} END{print VER}' /tmp/avdownload/update.ini )
danke für eure bisherigen Hinweise, ich krieg leider nach wie vor die Fehlermeldung dass die Variable kein Integer ist ...
ja dann lass mal die Datei 'rüber wachsen. Am besten als tar-File (damit auf dem Weg nicht die newlines o.ä. verloren gehen. Bye Jürgen -- Dr.rer.nat. Juergen Vollmer, Viktoriastrasse 15, D-76133 Karlsruhe Tel: +49(721) 9204871 Fax: +49(721) 24874 Juergen.Vollmer@informatik-vollmer.de www.informatik-vollmer.de Internet-Telefonie: www.skype.com Benutzer: juergen.vollmer
ja dann lass mal die Datei 'rüber wachsen. Am besten als tar-File (damit auf dem Weg nicht die newlines o.ä. verloren gehen.
Here you go .... [SuperDat-IA32] EngineVersion=4400 DATVersion=4539 FileName=sdat4539.exe FileSize=7185973 Checksum=7763,3CB7 [ZIP] EngineVersion=0 DATVersion=4539 FileName=dat-4539.zip FilePath=/pub/antivirus/datfiles/4.x/ FileSize=5962675 Checksum=53DC,8F36 MD5=6da8ec7523e380d028776a0bceccd287 [SCM] EngineVersion=0 DATVersion=4539 FileName=scm-4539.zip FilePath=/pub/antivirus/datfiles/4.x/ FileSize=6428485 Checksum=E9DA,E384 MD5=565164b7e80227153f9428a3c4bf810e [Incremental] EngineVersion=0 DATVersion=4539 FileName=delta.ini FileSize=1307 Checksum=4078,6F72 [Engine-LINUX] EngineVersion=4400 FileName=elnx4400.zip FileSize=1125553 Checksum=9016,9458 MD5=cf052b051d4be5b4bb66e10fb4287312 FilePath=/pub/antivirus/engine/4.x/ [Engine-NETWARE] EngineVersion=4400 FileName=nw4400.zip FileSize=5316678 Checksum=339A,835B MD5=60d430220671dd708174867ba4d0f79b FilePath=/pub/antivirus/engine/4.x/ [Engine-P4LNX] EngineVersion=4400 FileName=elnxp44400.zip FileSize=1041992 Checksum=A8B0,817A MD5=384025df5170622e4561d1ef1f42d1ea FilePath=/pub/antivirus/engine/4.x/
Von: Martin Hochreiter
Here you go ....
Hi, versuch mal den vergleich folgendermasen zu machen: test [ "$SOLLID" < "$ISTID" ] Gruß Merenda -- 5 GB Mailbox, 50 FreeSMS http://www.gmx.net/de/go/promail +++ GMX - die erste Adresse f�r Mail, Message, More +++
Am Donnerstag, 21. Juli 2005 16:40 schrieb Martin Hochreiter:
ja dann lass mal die Datei 'rüber wachsen. Am besten als tar-File (damit auf dem Weg nicht die newlines o.ä. verloren gehen.
Here you go ....
und wo ist das Problem: $ IST=4500 && SOLL=$(cat update.ini | grep "DATVersion" | cut -d "=" -f 2 | tail -n1) $ if [[ $IST < $SOLL ]] ; then echo "IST ist kleiner" ; fi IST ist kleiner $ if [[ $IST -lt $SOLL ]] ; then echo "IST ist kleiner" ; fi IST ist kleiner $ if [ $IST -lt $SOLL ] ; then echo "IST ist kleiner" ; fi IST ist kleiner klappt in allen Varianten.
und wo ist das Problem:
$ IST=4500 && SOLL=$(cat update.ini | grep "DATVersion" | cut -d "=" -f 2 | tail -n1) $ if [[ $IST < $SOLL ]] ; then echo "IST ist kleiner" ; fi IST ist kleiner $ if [[ $IST -lt $SOLL ]] ; then echo "IST ist kleiner" ; fi IST ist kleiner $ if [ $IST -lt $SOLL ] ; then echo "IST ist kleiner" ; fi IST ist kleiner
Eben nicht, ich krieg bei if [ "$ISTID" -lt "$SOLLID" ]; then eine "integer" Fehlermeldung ($ISTID=20) und genauso wie bei if [ $ISTID -lt $SOLLID ]; then lg Ich bin da echt ratlos
--- Ursprüngliche Nachricht --- Von: Martin Hochreiter
An: suse-linux@suse.com Eben nicht, ich krieg bei if [ "$ISTID" -lt "$SOLLID" ]; then
eine "integer" Fehlermeldung ($ISTID=20) und genauso wie bei
if [ $ISTID -lt $SOLLID ]; then
lg Ich bin da echt ratlos
Versuch es doch mal mit: if [ "$ISTID" < "$SOLLID" ]; then Und Poste mal ob das funkt oder nicht. Gruß Merenda Luisa -- 5 GB Mailbox, 50 FreeSMS http://www.gmx.net/de/go/promail +++ GMX - die erste Adresse f�r Mail, Message, More +++
Am Donnerstag, 21. Juli 2005 17:05 schrieb luisa merenda:
Versuch es doch mal mit:
if [ "$ISTID" < "$SOLLID" ]; then
Und Poste mal ob das funkt oder nicht.
dürfte nicht gehen, da: aus: Advanced Bash−Scripting Guide <quote> < --> is less than, in ASCII alphabetical order if [[ "$a" < "$b" ]] if [ "$a" \< "$b" ] Note that the "<" needs to be escaped within a [ ] construct. </quote> aber ich hab noch eine weitere Variante ;) $ if (( IST < SOLL )) ; then echo "IST ist kleiner" ; fi IST ist kleiner Gruß Andreas
Hallo, Am Thu, 21 Jul 2005, Martin Hochreiter schrieb:
Eben nicht, ich krieg bei
if [ "$ISTID" -lt "$SOLLID" ]; then
eine "integer" Fehlermeldung ($ISTID=20) und
Du versuchst ja auch zwei Strings (wg. der "") zu vergleichen.
genauso wie bei
if [ $ISTID -lt $SOLLID ]; then
Lass mich raten: da sind Windowszeilenumbrueche drin und an der Zahl klebt am Zeilenende noch ein '\r'... Mach mal ein: 'echo "$ISTID" | hex; echo "$SOLLID" | hex' Wenn da vor dem 0a noch ein 0d steht... Versuch mal: awk -F "[=\r]" '/DATVersion/{print $2;}' DATEI oder awk -F "[= ]" '/DATVersion/{print $2;}' DATEI ^^ ein echtes Strg+m, in der Shell per strg+v strg+m einzugeben. Ausserdem wirst du mit awk auch z.B. auch gleich die Versionsnummern vergleichen koennen... erzaehl mal mehr davon was du eigentlich machen willst. -dnh -- The more sophisticated you became, the less you relied on fear and pain to keep you alive; you could afford to ignore them because you had other means of coping with the consequences if things went badly. -- Scholar Uagen Zlepe, "Look to Windward" by Iain M. Banks
Martin Hochreiter schrieb:
und wo ist das Problem:
$ IST=4500 && SOLL=$(cat update.ini | grep "DATVersion" | cut -d "=" -f 2 | tail -n1) $ if [[ $IST < $SOLL ]] ; then echo "IST ist kleiner" ; fi IST ist kleiner $ if [[ $IST -lt $SOLL ]] ; then echo "IST ist kleiner" ; fi IST ist kleiner $ if [ $IST -lt $SOLL ] ; then echo "IST ist kleiner" ; fi IST ist kleiner
Eben nicht, ich krieg bei
if [ "$ISTID" -lt "$SOLLID" ]; then
eine "integer" Fehlermeldung ($ISTID=20) und genauso wie bei
if [ $ISTID -lt $SOLLID ]; then
lg Ich bin da echt ratlos
Folgendes for d in $(awk -F"=" '/DATVersion/ {print $2}' Daten.txt) do [ $d -lt 4540 ] && echo kleiner || echo "grösser"; done; funktioniert hier einwandfrei. Wenn das bei Dir nicht geht... Ist die Datei evtl. im DOS Format? Dann sollte es so gehen: for d in $(awk -F"=" '/DATVersion/ {print int($2)}' Daten.txt) do [ $d -lt 4540 ] && echo kleiner || echo "grösser"; done; Also die Ausgabe in awk explizit als integer formatieren. Oder die Datendatei mal mit recode ins Linux Format umwandeln.
-- Gruss Bernd
Nochmal vielen Dank für eure zahlreichen Tipps! Funktioniert hat nur einer - ein recoder der Datei auf Unix format ...
participants (7)
-
Andreas Loesch
-
Bernd Obermayr
-
David Haller
-
Dr. Jürgen Vollmer
-
luisa merenda
-
Mario Goppold
-
Martin Hochreiter