Antworten auf deine Fragen:
Neues Thema erstellen

unix script

fakerer

Aktives Mitglied

Hallo,
ich versuche ein Script zu erstellen welches in einer MySQL Datenbank nachsieht ob es neue Einträge gibt und wenn ja Files kopiert.

Tabelle enthält id|source|targetpath|targetfile|erledigt

Allerdings hab ich da noch mehr Probleme als Lösungen.
ich hätte mir das so vorgestellt:
1) row auslesen wenn nichterledigte vorhanden
2) prüfen ob targetpath existiert wenn nicht anlegen
3) File kopieren

1) hätte ich so versucht klappt leider nicht
result=`mysql -h localhost --user=$USER --password=$PASSWD --skip-column-names -e "select * from dbName.dbTable"`
$(echo $result) | while IFS= read -r ROW
do
echo "$ROW"
done

2) dirtest="ordner\test1"
mkdir -p $dir
if [ -d $dir ]
then
echo "existiert"
else
echo "existiert NICHT"
fi

das überprüfen kalppt aber das ordernererstellen geht immer nur für einen ordner wenn es mehr als einen anzulegen gilt was ja normal im terminal mit -p klappt geht hier auch nicht

3) scp hab ich im script noch nicht versucht
 

Duddle

Posting-Frequenz: 14µHz

AW: unix script

Welche Shell benutzt du (ich vermute BASH)? Da gibt es Unterschiede bei der Behandlung von bestimmten Befehlen und Sonderzeichen.

Zu 1: ich bin mir nicht sicher, wie
Code:
$(echo $result)
funktionieren kann, ausser in $result steht ein Befehl drin. Das Konstrukt $(foobar) führt foobar aus, zumindest in BASH. Daher die Frage nach der Shell.

Zu 2: erstens benutzt du einen Backslash, obwohl unixoide Systeme so weit ich weiß durchgängig einen Slash als Pfadtrennzeichen benutzen. Zweitens nennst du die Variable dirtest, arbeitest danach aber mit $dir.

Zu 3: Ja, scp ist hier dein Freund.

Vergiss am Ende nicht, dass der Cron Daemon in einer eigenen Umgebung arbeitet. Das heißt, Pfade / Umgebungsvariablen / Aliase usw. die du gewöhnt bist sind nicht notwendigerweise vorhanden.


Duddle
 

fakerer

Aktives Mitglied

AW: unix script

danke für die schnelle Antwort
ich verwende #!/bin/sh

result=`mysql -h localhost --user=$USER --password=$PASSWD --skip-column-names -e "select * from dbName.dbTable"`
hiermit bekomme ich das ganze ergebnis in result das klappt

und danach versuche ich aus der ausgabe row für row durchzugehen
$(echo $result) | while IFS= read -r ROW

zu 2) so ein dummer fehler mit den slash das klappt jetzt das mit dir und dirtest war nur n tippfehler im post hier
 
Zuletzt bearbeitet:

Duddle

Posting-Frequenz: 14µHz

AW: unix script

und danach versuche ich aus der ausgabe row für row durchzugehen
$(echo $result)
Wie gesagt, das kann so nicht funktionieren, weil zuerst
Code:
echo $result
ausgeführt und dieses Ergebnis als Befehl interpretiert wird. Wenn in $result also "hallo welt" drinsteht, wird es zuerst mit echo ausgegeben und dann ausgeführt. Falls du dann kein Programm namens hallo hast, führt das natürlich zu Fehlern.
In deinem Fall reicht ein einfaches echo, aber mit Anführungszeichen um die Zeilenumbrüche zu erhalten:
Code:
echo "$result" | while read -r ROW


Duddle
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.635
Beiträge
1.538.449
Mitglieder
67.556
Neuestes Mitglied
Ggirl
Oben