Batch Befehle in Shell umwandeln
Hallo an Alle,
und zwar soll ich ein Script was mit in Batch vorliegt in Shell umformen , weil wir bald einen Linux Server bekommen.
Leider habe ich da sozusagen kaum Erfahrung, es ist auch nicht so einfach darum bitte ich Euch quasi um Hilfe hier.
Hier mal ein paar Zeilen die ich umformen soll:
Ich hoffe ihr könnt mir da ein wenig helfen ,sodass ich als Einsteiger damit umgehen kann.
Gruß Naucho
und zwar soll ich ein Script was mit in Batch vorliegt in Shell umformen , weil wir bald einen Linux Server bekommen.
Leider habe ich da sozusagen kaum Erfahrung, es ist auch nicht so einfach darum bitte ich Euch quasi um Hilfe hier.
Hier mal ein paar Zeilen die ich umformen soll:
set bds_dir=%bds_rootDir_Aufbau%\_anne_neu
set NLS_CHARACTERSET=WE8ISO8859P15
call sqlplus "%db_user%/%db_password%@%db_instance%" @%bds_dir%\createTable_ANNE.sql
rem rem rem move %bds_dir_quelldaten%\*.csv %bds_dir_quelldaten%\%INFILE%
pushd %bds_dir_benu%
set SOURCE_DIR=%bds_rootDir_Quelldaten%\anne
set TARGET_DIR=%bds_rootDir_Datensicherung_f%\_anne
set DATAFILE=%1
Ich hoffe ihr könnt mir da ein wenig helfen ,sodass ich als Einsteiger damit umgehen kann.
Gruß Naucho
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 75795
Url: https://administrator.de/contentid/75795
Ausgedruckt am: 17.11.2024 um 05:11 Uhr
12 Kommentare
Neuester Kommentar
Hallo Naucho,
an sich sollte das kein Problem sein. Ich Versuche es mal:
Die ??- Zeilen sind die Batchzeilen, wo ich nicht schlau draus werde was du da machst bzw. vorhast.
Zeile 3:
Was soll dort genau passieren?!
Zeile 4:
ein rem reicht eigentlich völlig aus.
Zeile 5:
Was genau macht pushd ? Kann leider damit nichts anfangen.
Die einzelnen Variablen wie %bds_rootDir_Datensicherung_f%, %bds_rootDir_Quelldaten%, etc... musst du natürlich auch noch deklarieren bzw. sind das bei die Systemvariablen? Sprich wurden von einem Programm erzeugt und sind somit immer vorhanden.
Grüße
Dani
an sich sollte das kein Problem sein. Ich Versuche es mal:
#!/bin/bash
bds_dir="PFAD"
NLS_CHARACTERSET="WE8ISO8859P15"
???
rem mv "%bds_dir_quelldaten%/*.csv" "%bds_dir_quelldaten%/%INFILE%"
???
SOURCE_DIR="PFAD"
TARGET_DIR="PFAD"
DATAFILE=$1
Zeile 3:
Was soll dort genau passieren?!
Zeile 4:
ein rem reicht eigentlich völlig aus.
Zeile 5:
Was genau macht pushd ? Kann leider damit nichts anfangen.
Die einzelnen Variablen wie %bds_rootDir_Datensicherung_f%, %bds_rootDir_Quelldaten%, etc... musst du natürlich auch noch deklarieren bzw. sind das bei die Systemvariablen? Sprich wurden von einem Programm erzeugt und sind somit immer vorhanden.
Grüße
Dani
Na, das kann aber nicht die Ganze Batchdatei gewesen sein. <grübel>
Weil das Script ist so nicht vollständig. Geh mal in die Eingabeaufforderung und gebe einfach echo %bds_rootDir_Aufbau% ein. Falls ein Wert exstiert, ist es eine Systemvariable. Andernfalls eine erzeugte (zur Laufzeit) Variable.
Die Zeilen, wo ich bisher umgesetzt habe, hättest du sicher auch mit Google hinbekommen. Denn SHELL-Scripts gibts da genug zum Spicken.
Gruß
Dani
PS: In Ausbildung sollte man eigentlich zuerst einmal ein bisschen googlen und Howto zur Shell lesen. Dann ist vieles einfacher. Denn Linux ist definitiv ein wichtiger Bestandteil der IT. Daran wird sich so schnell sicher nichts ändern - im Gegenteil.
Weil das Script ist so nicht vollständig. Geh mal in die Eingabeaufforderung und gebe einfach echo %bds_rootDir_Aufbau% ein. Falls ein Wert exstiert, ist es eine Systemvariable. Andernfalls eine erzeugte (zur Laufzeit) Variable.
Die Zeilen, wo ich bisher umgesetzt habe, hättest du sicher auch mit Google hinbekommen. Denn SHELL-Scripts gibts da genug zum Spicken.
Gruß
Dani
PS: In Ausbildung sollte man eigentlich zuerst einmal ein bisschen googlen und Howto zur Shell lesen. Dann ist vieles einfacher. Denn Linux ist definitiv ein wichtiger Bestandteil der IT. Daran wird sich so schnell sicher nichts ändern - im Gegenteil.
@Dani
pushd /?
Sichert das aktuelle Verzeichnis für die Benutzung des Befehls POPD, und
wechselt dann zum angegebenen Verzeichnis.
PUSHD [Pfad|...]
Pfad Gibt das Verzeichnis an, zu dem gewechselt werden soll.
Sichert das aktuelle Verzeichnis für die Benutzung des Befehls POPD, und
wechselt dann zum angegebenen Verzeichnis.
PUSHD [Pfad|...]
Pfad Gibt das Verzeichnis an, zu dem gewechselt werden soll.
@7stein
Danke für den Hinweis. Kenn leider nicht den Befehl unter Linux dazu.
Ich habe die entsprechenden Zeilen markiert, die du doch selber ausarbeiten musst. Da ich nicht weiß, was der Befehl (z.B. sqlldr) macht.
Nicht vergessen diese Zeile (call ..\admin\Environment\env_bds.bat
) + die Datei auch noch anzupassen.
Grüße
Dani
Danke für den Hinweis. Kenn leider nicht den Befehl unter Linux dazu.
#!/bin/bash
clear
call ..\admin\Environment\env_bds.bat <===BATCHZEILE
bds_dir=%bds_rootDir_Aufbau%/_anne_neu
bds_dir_quelldaten=%bds_rootDir_Quelldaten%/Anne
bds_dir_benu=%bds_rootDir_Aufbau%/Admin/Benutzerverwaltung
bds_dir_logfiles=%bds_rootDir_Logfiles%/anne
NLS_CHARACTERSET=WE8ISO8859P15
NLS_NCHAR_CHARACTERSET=WE8ISO8859P15
NLS_LANG=GERMAN_GERMANY.WE8ISO8859P15
call sqlplus "%db_user%/%db_password%@%db_instance%" @%bds_tools_dir%\set_aktBeladungstermin.sql <===BATCHZEILE
call sqlplus "%db_user%/%db_password%@%db_instance%" @%bds_protAppDir%\insertIntoJobkontrolle.sql ANNE 1 JOB_START ANNE <===BATCHZEILE
echo --------------------------------------------------------------------
echo -- (01) create Table t_anne
echo --------------------------------------------------------------------
call sqlplus "%db_user%/%db_password%@%db_instance%" @%bds_dir%\createTable_ANNE.sql <===BATCHZEILE
echo --------------------------------------------------------------------
echo -- (02) load Table t_anne
echo --------------------------------------------------------------------
INFILE=AB_ANNE_BDS_20071021.csv
rem move %bds_dir_quelldaten%\*.csv %bds_dir_quelldaten%\%INFILE% <===BATCHZEILE
call sqlldr userid=%db_user%/%db_password%@%db_instance% control=%bds_dir%\loadTable_ANNE.ctl log=%bds_dir_logfiles%\%AKT_STAND_KW%_loadTable_ANNE.log bad=%bds_dir_logfiles%\%AKT_STAND_KW%_loadTable_ANNE.bad direct=Y skip=1 data=%bds_dir_quelldaten%\%INFILE% <===BATCHZEILE
echo --------------------------------------------------------------------
echo -- (03) arbeiten an Tabelle t_anne
echo --------------------------------------------------------------------
call sqlplus "%db_user%/%db_password%@%db_instance%" @%bds_dir%\worksForTable_Anne.sql <===BATCHZEILE
echo --------------------------------------------------------------------------------
echo -- (88) Anne Quelldaten sichern
echo --------------------------------------------------------------------------------
call 88_zipMoveAndDelSourcefiles_ANNE.bat %INFILE% <===BATCHZEILE
echo -----------------------------------------------------------------------------------
echo -- Rechte granten fuer Tabelle ANNE
echo -----------------------------------------------------------------------------------
pushd %bds_dir_benu% <===BATCHZEILE - Kenne den Befehl unter Linux nicht
call run_grant_Rights_for_System ANNE <===BATCHZEILE
popd <===BATCHZEILE - Kenne den Befehl unter Linux nicht
call sqlplus "%db_user%/%db_password%@%db_instance%" @%bds_protAppDir%\insertIntoJobkontrolle.sql ANNE 2 JOB_ENDE ANNE <===BATCHZEILE
Nicht vergessen diese Zeile (call ..\admin\Environment\env_bds.bat
) + die Datei auch noch anzupassen.
Grüße
Dani
Hi!
Also du erstmal herausfinden, was "call sqlplus....", "call sqlldr..." macht. Denn ich bin mir fast sicher, die Befehle gibt es unter Linux nicht.
Des Weitern wäre es nicht schlecht, wenn du mal für jede ZEile im Batch notierst was am Ende dieser Zeile passieren sollte.
Beispiel:
Denn ich als Außenstehender kann damit nichts anfangen!
---
Des Weiteren rufst in dieser "alten" Batch nochmal eine Batchdatei (call 88_zipMoveAndDelSourcefiles_ANNE.bat ...) auf. Diese musst du natürlich auch umstellen. Nicht zu vergessen, den call am Anfang (call ..\admin\Environment\env_bds.bat ). Die am Ende natürlich auch (call run_grant_Rights_for_System....).
Es gibt doch auch eine Aufgabenbschreibung, was genau (SChritt für Schritt) in diesem Script passieren soll. Denn es ist auf jeden Fall keins aus der Sorte "Ich wurde geschrieben, weils mir langweilig war". DAfür ist es zulange und zu kompliziert.
Für "pushd ...." bzw. "popd..." musst du wohl googlen. Ich kenne auf Anhieb keinen Befehl unter Linux, der das Gleiche macht.
Grüße
Dani
Also du erstmal herausfinden, was "call sqlplus....", "call sqlldr..." macht. Denn ich bin mir fast sicher, die Befehle gibt es unter Linux nicht.
Des Weitern wäre es nicht schlecht, wenn du mal für jede ZEile im Batch notierst was am Ende dieser Zeile passieren sollte.
Beispiel:
call sqlplus "%db_user%/%db_password%@%db_instance%" @%bds_dir%\worksForTable_Anne.sql
---
Des Weiteren rufst in dieser "alten" Batch nochmal eine Batchdatei (call 88_zipMoveAndDelSourcefiles_ANNE.bat ...) auf. Diese musst du natürlich auch umstellen. Nicht zu vergessen, den call am Anfang (call ..\admin\Environment\env_bds.bat ). Die am Ende natürlich auch (call run_grant_Rights_for_System....).
Es gibt doch auch eine Aufgabenbschreibung, was genau (SChritt für Schritt) in diesem Script passieren soll. Denn es ist auf jeden Fall keins aus der Sorte "Ich wurde geschrieben, weils mir langweilig war". DAfür ist es zulange und zu kompliziert.
Für "pushd ...." bzw. "popd..." musst du wohl googlen. Ich kenne auf Anhieb keinen Befehl unter Linux, der das Gleiche macht.
Grüße
Dani
Moin Naucho,
Die paar Batchzeilen oben verraten in der Tat recht wenig darüber, was dort passiert.
Das liegt aber daran, dass eigentlich ein Sack voll anderer Skripte (vermutlich ein paar 1000 Zeilen) aufgerufen werden.
Alles das unterstellt, dass auf der Linux-Büchse gleichnamige Skripte und Executables und Datenbankclients und Datenbank-Connections da und im Suchpfad sind. Und die zwei Dutzend SQL-Input-Files,die als Parameter angegeben sind. Und die Rechte, dies alles unter Linix anfassen zu dürfen.
Also, ich will mich hier nicht aufregen *laaaaaaaaaaaaaaaangsam bis 200 zähle* , aber ich denke, Du hast die Aufgabe falsch verstanden.
Ich versuche es mal ganz vorsichtig:
Bevor Du ein Skript in eine völlig andere Umgebung "migrierst", "übersetzt", "portierst" oder was immer Du glaubst mit der versuchten Wort-für-Wort-Übersetzung erreichen zu können, davor musst Du doch wenigstens halbwegs wissen
Du kannst doch nicht ein Aquarium zentimeterweise in eine Honda GoldWing "übersetzen" oder ein Glas Becks Schluck für Schluck in eine Dose Erbsen, oder?
Und einen Windows-CMD-Batch kannst Du auch nur dann Zeile für Zeile "umstellen", wenn er nur interne Befehle enthalten würde. Nicht aber, wenn dieser Batch ein Nacheinander-Aufrufen von vielen bunten (Windows-) Utilities ist.
So, und nun klär, was da überhaupt zu den letzten drei Spielgelstrichen zu sagen ist, und kann können wir ein neues Bash-Skript entwerfen.
Oder Du sagst Deinem Cheffe, das keinerlei Kommentare und keinerlei Dokumentation vorhanden sind und dass es deshalb nur ein/e Entwickler/in entschlüsseln kann.
Hier im Forum z.B. gibt es mehrere, die man/frau mieten kann.
Grüße
Biber
Ich habe dieses Script nicht geschrieben ...
Lass ich gelten.und weiß selbst nicht , was da genau passiert.
Dann finde es heraus.Die paar Batchzeilen oben verraten in der Tat recht wenig darüber, was dort passiert.
Das liegt aber daran, dass eigentlich ein Sack voll anderer Skripte (vermutlich ein paar 1000 Zeilen) aufgerufen werden.
- Sqlldr ist der so genannte Oracle SQL-Loader, der genau wie
- sqlPlus, ein Oracle SQL-Client-Utitily, dass auch *.sql-Skripte "als Batch" ausführen kann
- der "88_zipMoveAndDelSourcefiles_ANNE.bat", der wiederum sicherlich auch ein Zip-Utility aufruft...
Alles das unterstellt, dass auf der Linux-Büchse gleichnamige Skripte und Executables und Datenbankclients und Datenbank-Connections da und im Suchpfad sind. Und die zwei Dutzend SQL-Input-Files,die als Parameter angegeben sind. Und die Rechte, dies alles unter Linix anfassen zu dürfen.
Also, ich will mich hier nicht aufregen *laaaaaaaaaaaaaaaangsam bis 200 zähle* , aber ich denke, Du hast die Aufgabe falsch verstanden.
Ich versuche es mal ganz vorsichtig:
Bevor Du ein Skript in eine völlig andere Umgebung "migrierst", "übersetzt", "portierst" oder was immer Du glaubst mit der versuchten Wort-für-Wort-Übersetzung erreichen zu können, davor musst Du doch wenigstens halbwegs wissen
- was liegt an Input vor oder muss als Ressource (Utility, Steuerdatei, SQL-Skript) vorhanden sein?
- was soll das Skript bewirken?
- wie ist die Verarbeitungslogik (nicht die handwerkliche Umsetzung, sondern abstrakt)?
Du kannst doch nicht ein Aquarium zentimeterweise in eine Honda GoldWing "übersetzen" oder ein Glas Becks Schluck für Schluck in eine Dose Erbsen, oder?
Und einen Windows-CMD-Batch kannst Du auch nur dann Zeile für Zeile "umstellen", wenn er nur interne Befehle enthalten würde. Nicht aber, wenn dieser Batch ein Nacheinander-Aufrufen von vielen bunten (Windows-) Utilities ist.
So, und nun klär, was da überhaupt zu den letzten drei Spielgelstrichen zu sagen ist, und kann können wir ein neues Bash-Skript entwerfen.
Oder Du sagst Deinem Cheffe, das keinerlei Kommentare und keinerlei Dokumentation vorhanden sind und dass es deshalb nur ein/e Entwickler/in entschlüsseln kann.
Hier im Forum z.B. gibt es mehrere, die man/frau mieten kann.
Grüße
Biber