script anpassen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
letzter3
Beiträge: 477
Registriert: 16.07.2011 22:07:31

script anpassen

Beitrag von letzter3 » 07.01.2012 14:44:33

Hallo,

ich verwende 2 scripte, welche ich gerne angepasst hätte, aber leider nicht weiß, wie ich das machen muss.

Code: Alles auswählen

root@ptLWL01:/etc/automysqlbackup# cat mysql-backup-pre
#!/bin/sh
echo "USER\nPASSWORT"|mount -t davfs https://USER.webdav.hidrive.strato.com /mnt/webdav.USER
Hier möchte ich vorher eine Prüfung, ob das webdav-Verzeichnis schon eingehängt ist. Wenn dies der Fall ist, soll sich das script einfach beenden, wenn nicht, soll das webdav-Verzeichnis eingehängt werden.

Code: Alles auswählen

root@ptLWL01:/etc/automysqlbackup# cat mysql-backup-post
#!/bin/sh
rsync -rc --delete-before /home/backup /mnt/webdav.USER/users/USER/backup && umount /mnt/webdav.USER
Dieses script soll um das erste incl. der Prüfung ergänzt werden.

Wie kann sowas aussehen?

Michael

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

Re: script anpassen

Beitrag von detix » 07.01.2012 18:53:26

Wenn sonst nichts nach /mnt/webdav gemountet wird kannst du es so versuchen:

Code: Alles auswählen

[ -z "$(mount | grep /mnt/webdav)" ] && echo "USER\nPASS...
rsync -rc --d...
Gruß an alle Debianer, und immer daran denken:
Macht ohne Haftung funktioniert nicht!

letzter3
Beiträge: 477
Registriert: 16.07.2011 22:07:31

Re: script anpassen

Beitrag von letzter3 » 08.01.2012 13:42:28

detix hat geschrieben:Wenn sonst nichts nach /mnt/webdav gemountet wird kannst du es so versuchen:

Code: Alles auswählen

[ -z "$(mount | grep /mnt/webdav)" ] &....[/quote]

Es wird nichts anderes nach /mnt/webdav.user gemounted, nur dieses eine webdav-Verzeichnis.

Eine Frage: Was macht [ -z "$(mount | grep /mnt/webdav)" ]? Und müsste es nicht /mnt/webdav.user heissen? Dieses Verzeichnis existiert übrigens immer, das webdav-Verzeichnis wird darin eingebunden.
Führe ich den Teil [ -z "$(mount | grep /mnt/webdav)" ] isoliert bei nicht eingebundenem Verzeichnis aus, passiert nix.
Auch nicht bei [ -z "$(mount | grep /mnt/webdav.user)" ]
Michael

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: script anpassen

Beitrag von Cae » 08.01.2012 14:22:25

letzter3 hat geschrieben:Eine Frage: Was macht [ -z "$(mount | grep /mnt/webdav)" ]?
Eine Antwort: mount (ohne Argumente) liefert alle aktiven Mounts und deren Mountpunkte zurück. Der stdout wird an grep gepipt, welches nun alle Zeilen zurückgeben würde, die "/mnt/webdav" enthalten. Hier wird aber geschickt eine andere Eigenschaft verwendet: grep gibt bei einem oder mehr Funden als Rückgabewert 0 zurück (sonst 1), also wird mit test ([ und ] sind Aliases/Softlinks darauf) -z (Argument gibt leere Antwort zurück) geprüft, ob der Mountpunkt in der Mountliste vorkommt. && bedeutet "führe aus, wenn vorgehender mit ret=0 endete".

Gruß Cae

--Edit: oh, -z heißt nix und nicht ret=0. Aus der Manpage:

Code: Alles auswählen

       -z STRING
              the length of STRING is zero
.
Zuletzt geändert von Cae am 08.01.2012 16:50:12, insgesamt 1-mal geändert.
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

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

Re: script anpassen

Beitrag von detix » 08.01.2012 16:11:29

Ergänzend zum Post von Cae
Das ist nur eine verkürzte Schreibweise einer "if; then; fi" Fallentscheidung,
man kann das ausführlicher auch so schreiben:

Code: Alles auswählen

if [ -z "$(mount | grep /mnt/webdav)" ]; then
  echo "USER\nPASS...
fi
rsync -rc --d...
Tipp: nimm den Befehl von "innen nach außen" auseinander,
also nur mal "mount" ausführen, dann "mount | grep /mnt/webdav",
dann wird deutlicher worum es geht, "-z" fragt nur ab ob der Befehl überhaupt etwas ausgibt.
Schau dir dazu auch die Skripte in /etc/init.d/ an.
Gruß an alle Debianer, und immer daran denken:
Macht ohne Haftung funktioniert nicht!

letzter3
Beiträge: 477
Registriert: 16.07.2011 22:07:31

Re: script anpassen

Beitrag von letzter3 » 09.01.2012 21:37:42

okay, danke!

Michael

letzter3
Beiträge: 477
Registriert: 16.07.2011 22:07:31

Re: script anpassen

Beitrag von letzter3 » 14.02.2017 21:43:02

Nun, auf einem anderen Rechner ein anderes Problem mit dem script.
Auf dem von damals (also oben), funktioniert das nach wie vor.
Nun will ich jedoch von HiDrive die Sachen auf einen anderen PC wieder runtersyncen.
Nun wird beim mounten anscheinend die USER/PASSWORD-Kombination nicht übernommen.
Vielleicht hab ich (beim zusammenkopieren) auch bloss nen Fehler drin?

Code: Alles auswählen

root@openmediavault:~# ./backup.sh
Gib bitte den Benutzernamen für den Server https://letzter3.webdav.hidrive.strato.com an; wenn du keinen angeben willst, drücke Return.
  Benutzername: Gib bitte das Passwort von letzter3 für den Server https://letzter3.webdav.hidrive.strato.com
an; wenn du keines angeben willst, drücke Return.
  Passwort: umount.davfs: 
  kann die PID nicht aus /var/run/mount.davfs/mnt-webdav.letzter3letzter.pid auslesen;
  versuche trotzdem das Dateisystem auszuhängen;
  bitte warte bis der mount.davfs-Prozess endet
umount: /mnt/webdav.letzter3letzter: not found
root@openmediavault:~# 

Code: Alles auswählen

root@openmediavault:~# cat backup.sh
#!/bin/sh
[ -z "$(mount | grep /media/webdav.letzter3)" ] && echo "letzter3\nPASSWORD"|mount -t davfs https://letzter3.webdav.hidrive.strato.com /media/webdav.letzter3 && rsync --delete --size-only -arn /media/webdav.letzter3/users/letzter3/backup /media/347ded30-d521-4d0a-a6e5-ceb36a77a121/PT_LWL_BAckup/ && umount.davfs /mnt/webdav.letzter3
Mag da mal einer draufschauen?
Und ein weiteres Problem, da diesmal alles in einem script und mit && verbunden-> wenn der webdav-Ordner noch eingebunden ist, würde das script ja kommentarlos abbrechen, oder?
(Den Fehler im letzten umount hab ich schon gesehen.....) :oops:

letzter3
Beiträge: 477
Registriert: 16.07.2011 22:07:31

Re: script anpassen

Beitrag von letzter3 » 14.02.2017 21:47:59

Ha, doch richtig zusammenkopiert :oops: :roll:
Hatte noch den dry-run drinne und und die Passwortabfrage kam mit der nächsten Ausgabe so schnell hintereinander, dass ich von einem Fehler ausgegangen bin.

Meine 2. Frage hab ich aber immer noch nicht geklärt, kann mir einer auf die Sprünge helfen?

uname
Beiträge: 12397
Registriert: 03.06.2008 09:33:02

Re: script anpassen

Beitrag von uname » 15.02.2017 08:24:18

Und ein weiteres Problem, da diesmal alles in einem script und mit && verbunden-> wenn der webdav-Ordner noch eingebunden ist, würde das script ja kommentarlos abbrechen, oder?
Das ist die Funktion von && . Eine Und-Verknüpfung kann nicht mehr wahr werden, wenn eine vorherige Teilaussage falsch war. Daher bricht die Verarbeitung ab. Du könntest aber die Befehle auch sequentiell ausführen, indem du sie mit einem Semikolon (;) trennst. Evtl. musst du trotzdem if-Abfragen oder && in etwas geringerem Umfang nutzen.

Etwas offtopic:
Auch ist der Oder-Operator (||) ganz nett, den ich zum Wiederaufruf bzw. Neuaufruf von Debiantmux-Sessions nutze.

Code: Alles auswählen

/usr/bin/tmux attach || /usr/bin/tmux new
tmux attach || tmux new
tmux wird mit dem Parameter new nur ausgeführt, wenn das Attachen einer alten Sitzung fehlschlägt also keine Sitzung vorhanden war. Somit erreiche immer immer dieselbe Sitzung und wenn keine da ist gibt es eine neue. Bei Debianscreen ist das einfacher per

Code: Alles auswählen

screen -xRR

breakthewall
Beiträge: 507
Registriert: 30.12.2016 23:48:51

Re: script anpassen

Beitrag von breakthewall » 17.02.2017 02:18:17

letzter3 hat geschrieben:

Code: Alles auswählen

echo "USER\nPASSWORT"
Da es offenbar noch niemandem aufgefallen ist. Dieser Code funktioniert nicht ohne den -e Schalter, der nötig ist um bspw. \n als neue Zeile zu interpretieren.

letzter3
Beiträge: 477
Registriert: 16.07.2011 22:07:31

Re: script anpassen

Beitrag von letzter3 » 17.02.2017 11:14:21

Doch, das funktioniert.

Benutzeravatar
Phineas
Beiträge: 354
Registriert: 20.06.2012 20:26:19

Re: script anpassen

Beitrag von Phineas » 17.02.2017 18:49:48

breakthewall hat geschrieben:
letzter3 hat geschrieben:

Code: Alles auswählen

echo "USER\nPASSWORT"
Da es offenbar noch niemandem aufgefallen ist. Dieser Code funktioniert nicht ohne den -e Schalter, der nötig ist um bspw. \n als neue Zeile zu interpretieren.
Also ich finde in der Manpage der Dash kein -e im Abschnitt "echo".
Bei /bin/sh im Shebang und Debian, gehe ich jedenfalls von der Dash aus.

breakthewall
Beiträge: 507
Registriert: 30.12.2016 23:48:51

Re: script anpassen

Beitrag von breakthewall » 17.02.2017 19:56:22

Phineas hat geschrieben:Also ich finde in der Manpage der Dash kein -e im Abschnitt "echo".
Bei /bin/sh im Shebang und Debian, gehe ich jedenfalls von der Dash aus.
Mit der Dash funktioniert das standardmäßig so, dass ist richtig. Auch wenn mir der Bash-Weg lieber ist, dass erst etwas interpretiert wird bei echo wenn man das haben will.
Und ich ging daher automatisch von der Bash aus, der eigentlichen Standard-Shell unter Linux. Lesen hilft. :D
Mit der Dash hab ich an sich gar nichts mehr zu tun, da die erheblich eingeschränkte Funktionalität im Vergleich ziemlich behindert. Besonders aufgrund des hohen Verbreitungsgrades der Bash, finde ich das nicht länger sinnig auf eine reine Posix-Shell zu setzen. Aber das ist nur meine Meinung. :mrgreen:

tobo
Beiträge: 2339
Registriert: 10.12.2008 10:51:41

Re: script anpassen

Beitrag von tobo » 17.02.2017 22:38:56

breakthewall hat geschrieben:Besonders aufgrund des hohen Verbreitungsgrades der Bash, finde ich das nicht länger sinnig auf eine reine Posix-Shell zu setzen.
Ich finde, das ist sogar sehr wichtig!? Du hältst dich an den Standard und damit ist gewährt, dass es unter standardkonformen Shells auch funktioniert. Völlig unabhängig von irgendwelchen "Shell-Versionssprung-Funktionalitäts-Aufrüstungen"!? Man darf das natürlich nicht gleichsetzen mit einer interaktiven Shell - da taugt die Dash natürlich nicht...

breakthewall
Beiträge: 507
Registriert: 30.12.2016 23:48:51

Re: script anpassen

Beitrag von breakthewall » 18.02.2017 00:00:02

tobo hat geschrieben:Ich finde, das ist sogar sehr wichtig!? Du hältst dich an den Standard und damit ist gewährt, dass es unter standardkonformen Shells auch funktioniert. Völlig unabhängig von irgendwelchen "Shell-Versionssprung-Funktionalitäts-Aufrüstungen"!? Man darf das natürlich nicht gleichsetzen mit einer interaktiven Shell - da taugt die Dash natürlich nicht...
Darum ging es doch gerade, weil die Bash nahezu überall zu finden ist. Dazu kann man mit ihr auch standardkonform arbeiten, mittels zusätzlicher Parameter, was dann technisch nicht anders wie eine Dash wäre. Nur das was ich hinsichtlich der Kompatibilität dennoch als Problem ansehe, wären die ganzen GNU-Tools. Denn auch wenn das Shellscript selbst seitens der Shell posix-kompatibel gehalten ist, dann gilt das nicht gleichermaßen für viele GNU-Tools und deren nicht selten inkompatible Parameter wie auch Eigenheiten, die sich je nachdem deutlich von jenen Versionen unterscheiden, die z.B. unter BSD, Solaris etc. zu finden wären. Wird darauf nicht penibel geachtet, ist das Shellscript alles Andere als kompatibel. Von daher sind Shellscripte in Sachen Kompatibilität, schlicht das falsche Werkzeug, um so etwas einfach ohne Fallstricke umzusetzen. Da wäre man bei Python und vergleichbaren Scriptsprachen irgendwo besser bedient. Geht es nur rein um Linux-Systeme mit entsprechend identischen GNU-Tools, dann wäre das wieder etwas Anderes.

tobo
Beiträge: 2339
Registriert: 10.12.2008 10:51:41

Re: script anpassen

Beitrag von tobo » 18.02.2017 01:06:05

breakthewall hat geschrieben:Nur das was ich hinsichtlich der Kompatibilität dennoch als Problem ansehe, wären die ganzen GNU-Tools. Denn auch wenn das Shellscript selbst seitens der Shell posix-kompatibel gehalten ist, dann gilt das nicht gleichermaßen für viele GNU-Tools und deren nicht selten inkompatible Parameter wie auch Eigenheiten, die sich je nachdem deutlich von jenen Versionen unterscheiden, die z.B. unter BSD, Solaris etc. zu finden wären. Wird darauf nicht penibel geachtet, ist das Shellscript alles Andere als kompatibel. Von daher sind Shellscripte in Sachen Kompatibilität, schlicht das falsche Werkzeug, um so etwas einfach ohne Fallstricke umzusetzen.
Ich sehe das ein bisschen anders: Will ich einen Standard einhalten, dann muss ich mich nach diesem Standard richten. Ich setze nur das ein, was auch standardkonform ist!? Das ist (übrigens) die generell Vorgehensweise, wenn irgendein Standard definiert ist, der eingehalten werden soll. Klar muss man dann penibel auf die Umsetzung achten und klar gibt es da auch (genügend) Fallstricke. Aber die GNU-Tools z.B. beschreiben schon ziemlich ausführlich die Abweichungen zu POSIX. Auf was soll sich denn ein stabiles System sonst beziehen, wenn nicht auf einen Standard, der es definiert: auf Versionsangaben oder auf Software die rückwärtskompatibel bis zu ihrem Ursprung ist?

letzter3
Beiträge: 477
Registriert: 16.07.2011 22:07:31

Re: script anpassen

Beitrag von letzter3 » 18.02.2017 18:05:21

Mag mal jemand die bash/dash/Standard-Diskussion abtrennen?

Antworten