Herausfinden, ob nun "enx ... " oder "ethX" der Fall ist mit einem `if` im Shell-Skript [Gelöst]

Warum Debian und/oder eine seiner Spielarten? Was muss ich vorher wissen? Wo geht es nach der Installation weiter?
Antworten
jmar83
Beiträge: 962
Registriert: 20.06.2013 20:20:15
Wohnort: CH
Kontaktdaten:

Herausfinden, ob nun "enx ... " oder "ethX" der Fall ist mit einem `if` im Shell-Skript [Gelöst]

Beitrag von jmar83 » 17.06.2020 15:46:35

Hallo zusammen

Egal was ich nun mache, es kommt immer das Falsche dabei heraus:

Code:

Code: Alles auswählen

#!/bin/bash
#set -e && set -x;

if [[ "$(dpkg --print-architecture)" == "armhf" && "$(cat /sys/class/net/eth0)" -eq 0 ]]; then
    echo "enx ... ";
  else
    echo "eth0";
  fi;

Ausgabe auf System mit "enx ...":
`cat: /sys/class/net/eth0: Datei oder Verzeichnis nicht gefunden`
`eth0`

-> Also falsch!!


Ausgabe auf einem System mit "eth0":
`cat: /sys/classes/net/eth0: Ist ein Verzeichnis`
`eth0 `

-> Also richtig!!!

und mit `== null` muss ich es schon gar nicht versuchen, da immer ein Text dabei rauskommt. Und auf irgendwelchen Deutschen Texte einen abgleichen zu machen - ne, nicht wirklich...

Was ich will ist der RETURN CODE, nicht das was auf dem Output Buffer geschrieben wird.

Drehe noch durch nächstens ab diesen Zeugs... muss wohl echt wieder mal ne "richtige" Programmiersprache (wie z.B. Java) einsetzen damit es wieder mal klappt?!?

Vielen Dank für die Feedbacks.
Zuletzt geändert von jmar83 am 17.06.2020 17:17:36, insgesamt 1-mal geändert.
Freundliche Grüsse, Jan

jmar83
Beiträge: 962
Registriert: 20.06.2013 20:20:15
Wohnort: CH
Kontaktdaten:

Re: Herausfinden, ob nun "enx ... " oder "ethX" der Fall ist mit einem `if` im Shell-Skript

Beitrag von jmar83 » 17.06.2020 15:57:26

-> if/else sind zwar vertauuscht (wenn eth0 existiert sollte es "-eq 0" sein)

aber das ändert ja soweit nichts am problem
Freundliche Grüsse, Jan

jmar83
Beiträge: 962
Registriert: 20.06.2013 20:20:15
Wohnort: CH
Kontaktdaten:

Re: Herausfinden, ob nun "enx ... " oder "ethX" der Fall ist mit einem `if` im Shell-Skript

Beitrag von jmar83 » 17.06.2020 16:03:03

Das Problem ist wohl dass cat einen exit code ungleich 0 zurückgibt, wenn es keine datei ist?

Aber es befinden sich auch "Dateien" (???) in diesem Gerätepfad, aber dort drauf gibt's immer "Keine Berechtigung"... also wohl ebenfalls exit code ungleich 0....
Freundliche Grüsse, Jan

jmar83
Beiträge: 962
Registriert: 20.06.2013 20:20:15
Wohnort: CH
Kontaktdaten:

Re: Herausfinden, ob nun "enx ... " oder "ethX" der Fall ist mit einem `if` im Shell-Skript

Beitrag von jmar83 » 17.06.2020 16:05:02

dabei bin ich als root drin
Freundliche Grüsse, Jan

inne
Beiträge: 3281
Registriert: 29.06.2013 17:32:10
Lizenz eigener Beiträge: GNU General Public License
Kontaktdaten:

Re: Herausfinden, ob nun "enx ... " oder "ethX" der Fall ist mit einem `if` im Shell-Skript

Beitrag von inne » 17.06.2020 16:07:45

jmar83 hat geschrieben: ↑ zum Beitrag ↑
17.06.2020 15:46:35
Was ich will ist der RETURN CODE, nicht das was auf dem Output Buffer geschrieben wird.
Vom Kommando cat richtig?
Mal allgemein. Du nutzt schon && (und ||) das kennst du doch und das wertet den Exit Code aus. Anosnten steht der in $?. Was du mit der Subshell/Kommandsubstitution machst ist aber mit dem Output Buffer arbeiten.

Ich denke aber, dass wenn Du dein Problem beschreibst, und sagst warum den Interfacenamen willst, kann man dir besser helfen. Es gibt bestimmt einen besseren Weg um das Interface zu "finden".

jmar83
Beiträge: 962
Registriert: 20.06.2013 20:20:15
Wohnort: CH
Kontaktdaten:

Re: Herausfinden, ob nun "enx ... " oder "ethX" der Fall ist mit einem `if` im Shell-Skript

Beitrag von jmar83 » 17.06.2020 16:15:01

Unterschied ob mein raspbian 9 auf einem phsy. gerät läuft oder unter vdesktop (container virtualisierung) auf einem raspi 4 unter Raspbian 10


Jetzt wird's noch kaputter, habe gedacht versuceh es mal mit ls

Folgender Code gibt unter einem enx-system "enx" aus:

Code: Alles auswählen

if [[ "$(dpkg --print-architecture)" == "armhf" && "$(ls /sys/class/net/eth0)" -eq 0 ]]; then
    echo "enx";
  else
    echo "eth0 ";
  fi;

und unter einem eth-system "eth0"...

die ausgabe wäre zwar richtig, ABER:

` ... && ls /sys/class/net/eth0)" -eq 0` müsste ja auf einem enx-system dazu führen dass ls den pfad nicht findet und somit ungleich 0 zurückgibt!!

oder heisst das `-` vor dem `eq` "NOT" ?? `neq` gibt es scheinbar nicht, wird als fehler interpretiert
Freundliche Grüsse, Jan

jmar83
Beiträge: 962
Registriert: 20.06.2013 20:20:15
Wohnort: CH
Kontaktdaten:

Re: Herausfinden, ob nun "enx ... " oder "ethX" der Fall ist mit einem `if` im Shell-Skript

Beitrag von jmar83 » 17.06.2020 16:17:16

ja ,cat ist natürlich grundfalsch, ist ja um dateiinhalte anzuzeigen. habe zuerst aber auch gemeint das zuprüfende sei ne datei...
Freundliche Grüsse, Jan

jmar83
Beiträge: 962
Registriert: 20.06.2013 20:20:15
Wohnort: CH
Kontaktdaten:

Re: Herausfinden, ob nun "enx ... " oder "ethX" der Fall ist mit einem `if` im Shell-Skript

Beitrag von jmar83 » 17.06.2020 16:22:45

`-eq` -> exstiert
`eq` -> existiert nicht
`-neq` -> existiert nicht
`neq` -> existiert nicht

WTF??
Freundliche Grüsse, Jan

jmar83
Beiträge: 962
Registriert: 20.06.2013 20:20:15
Wohnort: CH
Kontaktdaten:

Re: Herausfinden, ob nun "enx ... " oder "ethX" der Fall ist mit einem `if` im Shell-Skript

Beitrag von jmar83 » 17.06.2020 16:25:36

Dann halt auf den deutsch Text prüfen... *** KOTZ!!! WÜRG!!! ***
Freundliche Grüsse, Jan

inne
Beiträge: 3281
Registriert: 29.06.2013 17:32:10
Lizenz eigener Beiträge: GNU General Public License
Kontaktdaten:

Re: Herausfinden, ob nun "enx ... " oder "ethX" der Fall ist mit einem `if` im Shell-Skript

Beitrag von inne » 17.06.2020 16:25:41

Code: Alles auswählen

if [[ "$(dpkg --print-architecture)" == "armhf"  && test -e /sys/class/net/eth0 ]]; then
        echo "enx";
else
    echo "eth0 ";
fi
Ist das von der Logik dann noch korrekt?
Zuletzt geändert von inne am 17.06.2020 16:30:20, insgesamt 3-mal geändert.

Benutzeravatar
detix
Beiträge: 1705
Registriert: 07.02.2007 18:51:28
Wohnort: MK

Re: Herausfinden, ob nun "enx ... " oder "ethX" der Fall ist mit einem `if` im Shell-Skript

Beitrag von detix » 17.06.2020 16:26:21

zeig doch erstmal die Ausgaben von:

Code: Alles auswählen

ls /sys/class/net
dpkg --print-architecture
Gruß an alle Debianer, und immer daran denken:
Macht ohne Haftung funktioniert nicht!

inne
Beiträge: 3281
Registriert: 29.06.2013 17:32:10
Lizenz eigener Beiträge: GNU General Public License
Kontaktdaten:

Re: Herausfinden, ob nun "enx ... " oder "ethX" der Fall ist mit einem `if` im Shell-Skript

Beitrag von inne » 17.06.2020 16:27:19

Es gibt aber auch ein Kommado im Archive, das testen kann ob du in der Virtuellenumgebung bist. Dauer nur immer einen Mom. bis mir der Name einfällt^^

jmar83
Beiträge: 962
Registriert: 20.06.2013 20:20:15
Wohnort: CH
Kontaktdaten:

Re: Herausfinden, ob nun "enx ... " oder "ethX" der Fall ist mit einem `if` im Shell-Skript

Beitrag von jmar83 » 17.06.2020 16:41:27

Code: Alles auswählen

if [[ "$(dpkg --print-architecture)" == "armhf" && test -e /sys/class/net/eth0 ]]; then
    echo "eth";
  else
    echo "enx";
  fi;

die echos wäre soweit jetzt korrekt, wenn eth0 existiert dann "eth" ausgeben... aber:

./t.sh: Zeile 4: conditional binary operator expected
./t.sh: Zeile 4: Syntaxfehler beim unerwarteten Wort `-e'
./t.sh: Zeile 4: `if [[ "$(dpkg --print-architecture)" == "armhf" && test -e /sys/class/net/eth0 ]]; then'



...und es liegt auch nicht dran dass mein shell-skript "test.sh" heisst (von wegen "test"), dann müsste es wenn schon `./test -e /sys/class/net/eth0` heissen um einen Konflikt zu geben.
Freundliche Grüsse, Jan

inne
Beiträge: 3281
Registriert: 29.06.2013 17:32:10
Lizenz eigener Beiträge: GNU General Public License
Kontaktdaten:

Re: Herausfinden, ob nun "enx ... " oder "ethX" der Fall ist mit einem `if` im Shell-Skript

Beitrag von inne » 17.06.2020 16:47:35

Entschuldigung! So sollte es tun :?:

Code: Alles auswählen

if [[ "$(dpkg --print-architecture)" == "armhf" ]] && test -e /sys/class/net/eth0 ; then
    echo "eth";
  else
    echo "enx";
  fi;

Schau dir auch noch mal systemd-detect-virt an, das Kommando meinte ich zwar vorhin nicht, aber mir fällt das andere einfach nicht mehr ein - vlt ist auch nicht mehr in Buster dabei :-(

jmar83
Beiträge: 962
Registriert: 20.06.2013 20:20:15
Wohnort: CH
Kontaktdaten:

Re: Herausfinden, ob nun "enx ... " oder "ethX" der Fall ist mit einem `if` im Shell-Skript

Beitrag von jmar83 » 17.06.2020 16:48:34

"zeig doch erstmal die Ausgaben von ... "

Phys:

ls /sys/class/net:
enxb827ebd7c5b3 habridge lo wlan0

-> habridge ist ein macvlan-adapter mit spez. Einstellung in der /etc/systctl.conf damit dieser nicht die gleiche MAC hat wie der phys. Adapter... die Alexa-Heinis von Amazon haben das so gemacht dass ihr Gerät nur noch auf Port 80 lauscht, statt auch auf 81 und anderen. Und auf dem phsy. Adapter läuft leider schon ein Apache für die Webseite, den ich noch noch zusätzlich mit "mod_proxy" manipiulieren möchte)


dpkg --print-architecture:
armhf (was denn sonst? ;-))

Virt:

ls /sys/class/net:
eth0 lo wlan

dpkg --print-architecture:
(dito)
Freundliche Grüsse, Jan

jmar83
Beiträge: 962
Registriert: 20.06.2013 20:20:15
Wohnort: CH
Kontaktdaten:

Re: Herausfinden, ob nun "enx ... " oder "ethX" der Fall ist mit einem `if` im Shell-Skript [Gelöst]

Beitrag von jmar83 » 17.06.2020 16:49:18

"Entschuldigung! So sollte es tun :?:"

Absolut keine Sache, vielen Dank, werde gerade schauen!! :-)
Zuletzt geändert von jmar83 am 17.06.2020 17:17:01, insgesamt 1-mal geändert.
Freundliche Grüsse, Jan

jmar83
Beiträge: 962
Registriert: 20.06.2013 20:20:15
Wohnort: CH
Kontaktdaten:

Re: Herausfinden, ob nun "enx ... " oder "ethX" der Fall ist mit einem `if` im Shell-Skript

Beitrag von jmar83 » 17.06.2020 16:57:56

Code:

Code: Alles auswählen

#!/bin/bash
#set -e && set -x;

if [[ "$(dpkg --print-architecture)" == "armhf" ]] && test -e /sys/class/net/eth0; then
    echo "eth";
  else
    echo "enx";
  fi;
  
Phys: `enx`

Virt: `eth`


Vielen Dank!!

:THX: :THX: :THX:

..dachte frage hier kurz im Forum nach, weil ich schon seit ca. dem frühen Nachmittag an diesem "Problem" (welches eigentlich gar keines ist, vorausgesetz "gewusst wie"!! ;-)) bin und nicht bis am Abend try-and-error machen will!!

Aber die if's sind bei shell-Skripts schon ziemlich strange...!!
Freundliche Grüsse, Jan

jmar83
Beiträge: 962
Registriert: 20.06.2013 20:20:15
Wohnort: CH
Kontaktdaten:

Re: Herausfinden, ob nun "enx ... " oder "ethX" der Fall ist mit einem `if` im Shell-Skript

Beitrag von jmar83 » 17.06.2020 16:59:51

"Schau dir auch noch mal systemd-detect-virt an"

Auch dafür vielen Dank, werde es bei Gelegenheit anschauen aber momentan hab ich immer noch die totale Aversion gegen das Zeugs und bin WIRKLICH WIRKLICH froh, dass es endlich funzt!!
Freundliche Grüsse, Jan

jmar83
Beiträge: 962
Registriert: 20.06.2013 20:20:15
Wohnort: CH
Kontaktdaten:

Re: Herausfinden, ob nun "enx ... " oder "ethX" der Fall ist mit einem `if` im Shell-Skript

Beitrag von jmar83 » 17.06.2020 17:05:10

-> Container-"Virtualisierung" ist zwar in etwa eh der grösste technische Murks, welchen ich je gesehen habe.

Aber in der Not frisst der Teufel bekanntlich fliegen! Soviel ich weiss könnte man mit dem richtigen Debian (also von Debian.org) in der "armhf"-Version (irgendwie) richtige virtuelle Maschinen machen. Aber leider verwenden wir für unsere Smart-Home-Lösung nur doofe raspis statt was professionelles wie z.b. ein embedded-Board (+passendes Gehäuse) mit "armhf"-ARM-Prozessor und "Debian for armhf" von debian.org... so long... ;-)

Na ja, im grossen und ganzen ist das nur zu Test- und Dev-Zwecken, wir sollten unser System mal auf Raspbian 10 migrieren was zur folge haben wird dass man massenhaft C/C++-Quelltexte (libBlaBlaBla.so) anpassen muss. (Die Web-App mit Apache, PHP und MariaDB ist dabei kein Problem) Nur das ist zielführend.
Freundliche Grüsse, Jan

irgendwas
Beiträge: 278
Registriert: 04.04.2016 18:53:19
Lizenz eigener Beiträge: MIT Lizenz

Re: Herausfinden, ob nun "enx ... " oder "ethX" der Fall ist mit einem `if` im Shell-Skript

Beitrag von irgendwas » 17.06.2020 17:18:43

Nichts für ungut jmar83, aber das Thema hat 19 Beiträge und 14 sind von dir. Alles in 90 Minuten. Das ist ein Forum und kein Live-Chat:
2.4. Topic-Bumping
Warte bitte mindestens 24h eh Du selbst auf Deine Fragen antwortest, um sie wieder an die erste Stelle in der Themenansicht zu bringen. Der Mindestabstand zwischen zwei Bumps ist ebenfalls 24h.

jmar83
Beiträge: 962
Registriert: 20.06.2013 20:20:15
Wohnort: CH
Kontaktdaten:

Re: Herausfinden, ob nun "enx ... " oder "ethX" der Fall ist mit einem `if` im Shell-Skript [Gelöst]

Beitrag von jmar83 » 17.06.2020 17:29:10

Ja, muss mich entschuldigen, das ist so ein "Unding" von mir (vor allem wenn ich gestresst und gleichzeitig genervt bin ;-)), muss schauen dass ich in Zukunft daran denke die bereits existenten Beiträge zu bearbeiten...

Das hier ist nicht das einzige Forum, wo ich auf diese Thematik hingewiesen werde.
Freundliche Grüsse, Jan

inne
Beiträge: 3281
Registriert: 29.06.2013 17:32:10
Lizenz eigener Beiträge: GNU General Public License
Kontaktdaten:

Re: Herausfinden, ob nun "enx ... " oder "ethX" der Fall ist mit einem `if` im Shell-Skript [Gelöst]

Beitrag von inne » 18.06.2020 09:45:35

Wenn es neue Erkenntnisse zum Problem sind, sollte man die schon ohne Edit, als neuen Beitrag nennen dürfen.

jmar83
Beiträge: 962
Registriert: 20.06.2013 20:20:15
Wohnort: CH
Kontaktdaten:

Re: Herausfinden, ob nun "enx ... " oder "ethX" der Fall ist mit einem `if` im Shell-Skript [Gelöst]

Beitrag von jmar83 » 18.06.2020 10:06:50

"Wenn es neue Erkenntnisse zum Problem sind, sollte man die schon ohne Edit, als neuen Beitrag nennen dürfen."

Ja, aber dass man das in einem "gewissen Mass" tun sollte (paar Problem/Erkenntnisse erst "sammeln" und diese dann alle auf einmal posten) kann ich irgendwie verstehen.
Freundliche Grüsse, Jan

Antworten