backspace
Goto Top

Shelldatei umschreiben zu batchdatei

Hallo,

ist es möglich ohne goßen Aufwand eine Shelldatei zu einer Batchdatei umzuschreiben ?

Es geht darum: muß für ein heterogenes Serversystem mit Windows und Linux, Programme erstellen (Vorgaben: .bat / .sh).

Will nicht alles immer doppelt aufwendig machen müssen, zudem ich mich als Azubi auch noch sehr schwer damit tue, mich da reinzudenken.

Hab mir auch schon die cmd-Befehlsliste angeschaut, um für die bereits von mir verwendeten Befehlen in den Shelldateien die gleichen oder zumindest ähnliche Befehle für die Batchdateien zu finden.
Der einzige Befehl für den ich einen aus der cmd-Liste zuordnen konnte, ist "getmac" anstelle von"ifconfig".

Hab im folgenden die Shelldatei reingestellt (liest den Laufwerksnamen, den freien Festplattenplatz und die Mac-Adresse eines Rechners aus) :
#!/bin/bash

declare -a DRIVES

MACADDRESS=`ifconfig | grep Hardware | awk '{print $6}'`

MYOUTPUT=`df -hT | grep -v Dateisystem | grep -v server_share | grep -v mapper | awk '{print $NF,$(NF-1)}'`

FREESPACE=`df -hT | grep -v Dateisystem | grep -v server_share | grep -v mapper | awk '{print $(NF-1)}'`

for element in $MYOUTPUT

do
echo ${MYOUTPUT}
done


P.S.: läuft auch soweit, gibt mir die Ergebnisse komischerweise jedoch 8-fach aus !?


Danke im Voraus

Gruß

Backspace

Content-Key: 153951

Url: https://administrator.de/contentid/153951

Printed on: April 16, 2024 at 08:04 o'clock

Member: Marvin32
Marvin32 Oct 28, 2010 at 05:50:18 (UTC)
Goto Top
Dein Problem wird sein, das die meisten Befehle von Windows in einer Unix Umgebung nicht existieren, oder/und eine ganz andere Parameterliste haben.

z.b. Die erste Zeile in deinem Shellscript bräuchtest du unter windows nicht (und in windows gibt es auch kein "declare")

ich befürchte, du musst den ganzen kram jeweils für die Win-Umgebung neu schreiben.

Schau dir doch mal die MS-Powershell an, damit kommst du auf jeden Fall schonmal weiter, da die Cmd-lets dort gleich oder ähnlich heißen, wie die Befehle in Unix/Linux.

Gruß
Marvin
Member: danielfr
danielfr Oct 28, 2010 at 06:01:56 (UTC)
Goto Top
Oder Du schaust Dir mal Cygwin an. Das emuliert eine Unix Umgebung auf einem Windows Rechner...
Gruß Daniel
Member: maretz
maretz Oct 28, 2010 at 06:24:09 (UTC)
Goto Top
was möchtest du denn am schluss haben?

Weil es ja noch mehr Optionen gibt... Dazu müsstest du dann nur richtig programmieren lernen -> schon baust du dir halt was selbst... Für das Auslesen von Hardware z.B. könnte ich mir Perl vorstellen (c++ natürlich auch aber ich vermute etwas schwerer...). Dann umgehst du das Problem mit dem OS - weil dein Compiler / Interpreter dafür sorgt das du die Befehle ausführen kannst... Nachteil: Bei Perl müsstest du auf allen Rechnern natürlich erstmal perl installiert haben...
Member: Backspace
Backspace Oct 28, 2010 at 11:29:09 (UTC)
Goto Top
Hallo,

sitze nun seit heute morgen mit rauchendem Kopf dran und komm irgendwie keinen Schritt weiter.

aus Shelldatei: MACADDRESS=`ifconfig | grep Hardware | awk '{print $6}'`

bei der Shelldatei konnte ich (siehe obige Zeile) die Position der gesuchten Information ausmachen, nämlich:
1. führe Befehl ifconfig aus
2 .suche nach dem Begriff Hardware
3. in der Zeile mit dem Begriff Hardware befindet sich die MACADRESSE an der 6.Stelle

Wie ist das als Batchdatei am besten zu machen (mit " findstr ", " mit for /f "tokens= ", ....) ?

Hab damit schon rumhantiert, es passierte entweder gar nichts, oder die txt Datei in der ich die ausgelesenen Daten reinimportiert habe (per ">"-Anweisung), hat sich nur geöffnet (mit den gesamten ausgelesenen Daten drin).

Kann mir bitte evtl. jemand nur für die MACADRESSE, die Befehlszeile hinschreiben ?

Gebe ich den Befehl getmac ein, so erscheint folgendes:

Physikal. Adresse Transportname
=======================
xx-xx-xx-xx-xx-xx Nicht zutreffend


Ich brauche praktisch das, wo die xx-xx-.......... stehn.


Danke

Backspace
Member: Friemler
Friemler Oct 28, 2010 at 18:06:03 (UTC)
Goto Top
Hallo Backspace,

schau Dir bei FOR /F die Optionen SKIP=, DELIMS= und TOKENS= an, das sollte zum Ziel führen.

Gruß
Friemler
Member: Biber
Biber Oct 28, 2010 at 19:39:16 (UTC)
Goto Top
Moin Backplatz,

Friemler hat völlig recht - lies einmal den FOR/?-Hilfetext am CMD-Prompt.
Dann kannst du es nächstes Mal ohne rauchenden Kopf.


Zitat von @Friemler:
schau Dir bei FOR /F die Optionen SKIP=, DELIMS= und TOKENS= an, das sollte zum Ziel führen.

In diesem konkreten Fall brauchst du allerdings nur eine der Optionen (Demo am CMD-Prompt):

>for /f "skip=3" %i in ('getmac') do @echo Mac-Adresse:%i
Mac-Adresse:00-nn-mm-xx-yy-zz

Im Batch jeweils zwei Prozentzeichen (%%i statt %i) schreiben.
Speichern der MAC-Adresse in eine Variable: Statt "echo %i" den Befehl 'Set myMAC=%i" verwenden.

Grüße
Biber