Danke für den Link, aber ich bau sowas lieber selber
Man kann sed -i "s/${ALTERNAME}/${NEUERNAME}/g" $i ja einfach durch sed -i "s/${ALTERNAME} /${NEUERNAME} /g" $i ersetzen, dann hat man das Problem mit den Namensteilen elegant gelöst.
Der Code-Schnippsel-Thread
-
-
Man kann sed -i "s/${ALTERNAME}/${NEUERNAME}/g" $i ja einfach durch sed -i "s/${ALTERNAME} /${NEUERNAME} /g" $i ersetzen, dann hat man das Problem mit den Namensteilen elegant gelöst.Das Trennzeichen ist doch ein Doppelpunkt, kein Leerzeichen. Zwar hast du damit dann die Benutzer-Datenbank einigermaßen sauber abgedeckt, aber dafür immer noch nicht /etc/group und /etc/gshadow, wo Benutzernamen am Ende als Teil einer kommaseparierten Liste aufgeführt werden.
-
Ist glaube ich egal, ob vor dem Komma ein Leerzeichen ist.
-
So mein Code sieht nun so aus:Bash
Alles anzeigen#!/bin/bash DATE=`date +"%m-%Y"` NAME="Backup" FULLNAME="$NAME-$DATE" SOURCE=${HOME}/Dokumente/ TARGET=/media/Daten/Backups/Monatsbackups/$FULLNAME/ TARGETB=/mnt/LAN/Sicherung\ Doku/Monatsbackups/$FULLNAME/ LOG=${HOME}/Backup.log LOGDATE=`date +"%d-%m-%Y"` TMPLOG=${HOME}/Backup.log.tmp if [ -e /media/Daten/Backups/Monatsbackups/$FULLNAME ]; then echo Backup vom $LOGDATE|tee -a $TMPLOG >>$LOG echo Sicherung auf /dev/sda3|tee -a $TMPLOG >>$LOG rsync -avu $SOURCE $TARGET |tee -a $LOG >> $TMPLOG; RSYNC1_RET=${PIPESTATUS[0]} echo ------------------------------------------------------------------------ |tee -a $TMPLOG >>$LOG echo Sicherung auf /dev/sdb1|tee -a $TMPLOG >>$LOG rsync -avu $SOURCE "$TARGETB" |tee -a $LOG >> $TMPLOG; RSYNC2_RET=${PIPESTATUS[0]} echo ------------------------------------------------------------------------ |tee -a $TMPLOG >> $LOG |tee else echo Backup vom $LOGDATE|tee -a $TMPLOG >>$LOG mkdir /media/Daten/Backups/Monatsbackups/$FULLNAME mkdir /mnt/LAN/Sicherung\ Doku/Monatsbackups/$FULLNAME/ rsync -avu $SOURCE $TARGET |tee -a $LOG >> $TMPLOG; RSYNC1_RET=${PIPESTATUS[0]} rsync -avu $SOURCE $TARGETB |tee -a $LOG >> $TMPLOG; RSYNC2_RET=${PIPESTATUS[0]} echo ------------------------------------------------------------------------ |tee -a $TMPLOG >> $LOG fi if [ $RSYNC1_RET -eq 0 -a $RSYNC2_RET -eq 0 ]; then mailx -s "Backup erfolgreich" $(whoami)@$(hostname) <$TMPLOG else mailx -s "Backup fehlgeschlagen" $(whoami)@$(hostname) <$TMPLOG fi rm $TMPLOG
Vielen Dank noch mal an DosAmp, der mch auf die Lösung gebracht hat.
So. Ich hab grade n leichtes Problem mit meinem Script. Es liegt unverändert unter /usr/bin, allerdings bekomme Ich jetzt folgende Fehlermeldung:
Codetobias@darkstar:~$ Backup.sh /usr/bin/Backup.sh: Zeile 28: [: Zu viele Argumente. tobias@darkstar:~$
Zeile 28 im Script:
Ich blicke grade net durch. Unter Squeeze lief das Script einwandfrei.
-
Ich würde erst mal schauen, ob das Konstrukt ${PIPESTATUS[0]} noch funktioniert und $RSYNC1_RET und $RSYNC2_RET Werte enthalten.
-
Ich würde erst mal schauen, ob das Konstrukt ${PIPESTATUS[0]} noch funktioniert und $RSYNC1_RET und $RSYNC2_RET Werte enthalten.Es war ein Tippfehler. hatte statt PIPESTATUS PIPESTAT.
Argh. Jetzt tut alles
-
Habe gerade eines meiner ersten Perl-Scripte wieder entdeckt. Der v6-Teil ist nie fertig geworden
Perl
Alles anzeigen#!/usr/bin/perl sub pruefe_ip; # Ist es IPv4? sub pruefe_v6; # Ist es IPv6? sub host_ip; # Host zu IP sub ip_host; # IP zu Host unless($ARGV[0]) { print "\n"; print "Maschine? "; $maschine=<STDIN>; chomp($maschine); print "\n"; } else { $maschine=$ARGV[0]; }; print "\n"; if(&pruefe_ip($maschine)==1) { print "Das ist eine IPv4!\n\n"; print "Sie lautet: ".$maschine."\n\n"; print "Ihr Hostname lautet: ".&ip_host($maschine)."\n\n"; } elsif(&pruefe_v6($maschine)==1) { print "Das ist eine IPv6!\n\n"; print "Sie lautet: ".$maschine."\n\n"; print "Ihr Hostname lautet: ".&ip_host($maschine)."\n\n"; } else { $host_ip=&host_ip($maschine); print "Das ist ein Hostname!\n\n"; print "Der Host hat die IP ".$host_ip."\n"; if(&pruefe_ip($host_ip)==1) { print "Dabei handelt es sich um eine IPv4\n\n"; }; if(&pruefe_v6($host_ip)==1) { print "Dabei handelt es sich um eine IPv6\n\n"; }; }; sub pruefe_ip { if($_[0] =~ /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/) { # xxx.xxx.xxx.xxx als IP-Muster (je zwischen 1-3 Ziffern je IP-Bestandteil) if(($1<255 && $1>0) && ($2<255 && $2>0) && ($3<255 && $3>0) && ($4<255 && $4>0)) { # nur Werte zwischen 1 und 254 für die einzelnen IP-Bestandteile return 1; } else { return undef; }; } else { return undef; }; }; sub pruefe_v6 { if($_[0] =~ /:/) { return 1; } else { return undef; }; }; sub host_ip { $hostname=$_[0]; $ip_ungekuerzt=`host $hostname`; $loeschzeichen=length($hostname)+13; $ip=substr($ip_ungekuerzt,$loeschzeichen); return $ip; }; sub ip_host { $ip=$_[0]; $host_ungekuerzt=`host $ip`; @woerter = split(/ /, $host_ungekuerzt); $host=$woerter[4]; return $host; };
Es gab sogar eine Version mit GTK-GUI:
Perl
Alles anzeigen#!/usr/bin/perl use Glib; use Gtk2 '-init'; sub buttonklick; sub schluss; sub pruefe_ip; # Ist es IPv4? sub pruefe_v6; # Ist es IPv6? sub host_ip; # Host zu IP sub ip_host; # IP zu Host my $label1=Gtk2::Label->new("Bitte geb eine IP-Adresse oder einen Host ein:"); my $eingabefeld=Gtk2::Entry->new(); my $ausgabefeld=Gtk2::Label->new(); my $button1 = Gtk2::Button->new("OK"); my $button2 = Gtk2::Button->new("Programm beenden"); my $window = Gtk2::Window->new; my $box = Gtk2::VBox->new(); # Hauptbox my $box1 = Gtk2::VBox->new(); # Box für Label und Textfeld my $box2 = Gtk2::VBox->new(); # Box für Buttons my $box3 = Gtk2::VBox->new(); # Box für Ausgabelabel $window->set_border_width(30); $window->set_title("Hostnames und IPs"); $window->set_position("center"); $box1->set_border_width(5); $box2->set_border_width(5); $box3->set_border_width(10); $window->signal_connect(destroy=>\&schluss); $button1->signal_connect(clicked=>\&buttonklick); $button2->signal_connect(clicked=>\&schluss); $box1->add($label1); $box1->add($eingabefeld); $box2->add($button1); $box2->add($button2); $box3->add($ausgabefeld); $window->add($box); $box->add($box1); $box->add($box2); $box->add($box3); $window->show_all(); Gtk2->main(); sub buttonklick { my $maschine=""; $maschine=$eingabefeld->get_text(); if($maschine eq "") { $ausgabefeld->set_text("Es wurde keine Maschine eingegeben!"); } else { if(&pruefe_ip($maschine)==1) { $inhalt="Das ist eine IPv4!\n". "Sie lautet: ".$maschine."\n". "Ihr Hostname lautet: ".&ip_host($maschine)."\n"; } elsif(&pruefe_v6($maschine)==1) { $inhalt="Das ist eine IPv6!\n". "Sie lautet: ".$maschine."\n". "Ihr Hostname lautet: ".&ip_host($maschine)."\n"; } else { $host_ip=&host_ip($maschine); $inhalt="Das ist ein Hostname!\n". "Der Host hat die IP ".$host_ip; if(&pruefe_ip($host_ip)==1) { $inhalt=$inhalt."Dabei handelt es sich um eine IPv4\n"; }; if(&pruefe_v6($host_ip)==1) { $inhalt=$inhalt."Dabei handelt es sich um eine IPv6\n"; }; }; $ausgabefeld->set_text($inhalt); }; }; sub pruefe_ip { if($_[0] =~ /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/) { # xxx.xxx.xxx.xxx als IP-Muster (je zwischen 1-3 Ziffern je IP-Bestandteil) if(($1<255 && $1>0) && ($2<255 && $2>0) && ($3<255 && $3>0) && ($4<255 && $4>0)) { # nur Werte zwischen 1 und 254 für die einzelnen IP-Bestandteile return 1; } else { return undef; }; } else { return undef; }; }; sub pruefe_v6 { if($_[0] =~ /:/) { return 1; } else { return undef; }; }; sub host_ip { $hostname=$_[0]; $ip_ungekuerzt=`host $hostname`; $loeschzeichen=length($hostname)+13; $ip=substr($ip_ungekuerzt,$loeschzeichen); return $ip; }; sub ip_host { $ip=$_[0]; $host_ungekuerzt=`host $ip`; @woerter = split(/ /, $host_ungekuerzt); $host=$woerter[4]; return $host; }; sub schluss { Gtk2->main_quit(); exit(0); };
-
Meine ersten PHP-Versuche.
PHP-Script zum erstellen der Datenbank.
Code
Alles anzeigen<? $dbname="Projekte"; $dbhost="localhost"; $dbuser="root"; $dbpass="blacky"; mysql_connect($dbhost,$dbuser,$dbpass); mysql_select_db($dbname); // Datenbank-Verbindung herstellen // siehe (mysql-datenbank-verbindung-herstellen.htm) // zuweisen der MySQL-Anweisung einer Variablen $sql = 'CREATE DATABASE Projekte'; $result = mysql_query($sql) or die("Anfrage fehlgeschlagen: " . mysql_error()); // Datenbank-Verbindung herstellen ?>
PHP-Script zum erstellen der Tabelle.
PHP
Alles anzeigen<?php // Datenbank-Verbindung herstellen require_once ('mkdb.php'); // Nutzen von Datenbank (Name ist hinterlegt in // Konstante MYSQL_DATENBANK) mysql_select_db( Projekte ) or die("Auswahl der Datenbank fehlgeschlagen"); // MySQL-Befehl der Variablen $sql zuweisen $sql = " CREATE TABLE `adressen` ( `id` INT( 10 ) NOT NULL AUTO_INCREMENT PRIMARY KEY , `Projektname` VARCHAR( 150 ) NOT NULL , `Beschreibung` VARCHAR( 150 ) NULL , `Fortschritt` VARCHAR( 2 ) NOT NULL , //Boolscher Wert, ob fertig oder nicht fehlt noch. ) ENGINE = MYISAM ; "; // MySQL-Anweisung ausführen lassen $db_erg = mysql_query($sql) or die("Anfrage fehlgeschlagen: " . mysql_error()); ?>
-
Nichts wildes, aber eventuell interessant:
#!/bin/bashps | grep oscam | grep -v grep | grep -v bash >/dev/null || oscam_start.shPrüfen ob ein Prozess läuft. Wenn nicht, ein Script starten. Habe ich mir grade auf dem Satreceiver zusammengefriemelt.
BTW: Warum ich bash rausfilter? Weil das Script auch oscam im Namen hat. Wenn es mittels ./ aufgerufen wird, ist das zu vernachlässigen, wenn man es jedoch an bash übergibt, dann ist das zu beachten. Da es keinen stört, lasse ichs drin. Wenn das Script anders heißt, kann man den Teil natürlich weglassen. Das >/dev/null sollte aber erhalten bleiben, damit es im Falle eines laufenden Prozesses nicht die Shell zuspammt.
Und noch was. Meine /etc/vim/vimrc.local:
- Hervorhebung übereinstimmender Klammern
- Zeilennummern
- Mausunterstützung
- Passende Highlighting-Farben für dunklen Terminalhintergrund
-
-
Wenn nfs in der fstab eingetragen ist, guckt der Client periodisch im Hintegrrund automatisch ob das Share da ist. Sobald er es erreichen kann, mountet er es automatisch.
Aber nette Idee, die Rückgabewerte von ping dafür zu nutzen. Kannst ja die Ausgabe von ping noch auf /dev/null umleiten, um die Ausgabe von selbigem weg zu bekommen. -
Wenn nfs in der fstab eingetragen ist, guckt der Client periodisch im Hintegrrund automatisch ob das Share da ist. Sobald er es erreichen kann, mountet er es automatisch.
Aber nette Idee, die Rückgabewerte von ping dafür zu nutzen. Kannst ja die Ausgabe von ping noch auf /dev/null umleiten, um die Ausgabe von selbigem weg zu bekommen.Wie müsste Ich das denn realisieren?
-
Wie müsste Ich das denn realisieren?
Einfach ein > /dev/null hinter den ping. Das leitet dann die stdout-Ausgaben auf /dev/null weiter. Bin mir grad nicht sicher, ob ping im Falle der Nichterreichbarkeit auf stderr auch was ausgibt. Wenn ja, ist aber auch das leicht umleitbar.
-
Einfach ein > /dev/null hinter den ping. Das leitet dann die stdout-Ausgaben auf /dev/null weiter. Bin mir grad nicht sicher, ob ping im Falle der Nichterreichbarkeit auf stderr auch was ausgibt. Wenn ja, ist aber auch das leicht umleitbar.
Merci b1. Das Skript kann Ich heute Abend ja dann anpassen.
-
Code
Alles anzeigen#include <stdio.h> int main(void) { unsigned int zahl,i,bin[8]; /* Als erstes wird der Bildschirm gelöscht */ /* Unter Linux mit system ("clear"); */ /* Unter DOS und Linux mit system ("cls"); */ system ("clear"); printf("Bitte geben Sie eine Zahl ein (<=255): "); scanf("%d",&zahl); printf("\nIhre Eingabe Dezimal: %d\n",zahl); printf("Ihre Eingabe Hex: 0x%X\n",zahl); printf("Ihre Eingabe Oktal %04o \n",zahl); printf("Ihre Eingabe Binär: "); for(i=0;i<8;i++) { bin[i]=((zahl>>i)&1); } for(i=0;i<8;i++) { printf("%d",bin[7-i]); } printf("\n"); return 0; }
hmm dieses Programm wandelt eine Dezimalzahl in Hex Oktal und Binär
okay es ist buggy ... wenn eine zahl grösser wie 255 eingegeben wird ist die ausgabe falsch
-
Code
Alles anzeigen#include <stdio.h> #define INT_BITS 8*sizeof(int) int main(void) { unsigned int zahl,i,bin[INT_BITS]; /* Als erstes wird der Bildschirm gelöscht */ /* Unter Linux mit system ("clear"); */ /* Unter DOS und Windows mit system ("cls"); */ system ("clear"); printf("Bitte geben Sie eine Zahl ein: "); scanf("%d",&zahl); printf("\nIhre Eingabe Dezimal: %d\n",zahl); printf("Ihre Eingabe Hex: 0x%X\n",zahl); printf("Ihre Eingabe Oktal %04o \n",zahl); printf("Ihre Eingabe Binär: "); for(i=0;i<INT_BITS;i++) { bin[i]=((zahl>>i)&1); } for(i=0;i<INT_BITS;i++) { printf("%d",bin[INT_BITS-1-i]); } printf("\n"); return 0; }
Das ist natürlich die einfachste Lösung. -
Code
0a1 > #!/usr/bin/tcc -run 16,17c17,18 < printf("Ihre Eingabe Oktal %04o \n",zahl); < printf("Ihre Eingabe Binär: "); --- > printf("Ihre Eingabe Oktal: %04o \n",zahl); > printf("Ihre Eingabe Binär: 0b");
Cool wär ja noch, wenn man die führenden Nullen bei Binär abschneiden könnte oder auf Bytes/Wörter/etc. „runden“ könnte (analog bei den andern). -
Bei diesem kleinen Programm handelt es sich um eine Zapfenrechnung die volltautomatisch ausgeführt wird. Einfach Daten eingeben und los gehts.
Testgerät: Sharp PC1500A10 Print"Zapfenrechner"
15 Input"Tempo?";T < Regelt das Anzeigetempo
20 WAIT T: INPUT"STARTZAHL?";ST
25 INPUT"REIHEN?";R
30 BEEP 1
35 FOR A=2 TO R
40 PRINT ST;"*";A
45 ST=ST*A
50 NEXT A
55 BEEP 1
60 FOR B=2 TO R
65 PRINT ST;"/";B
70 ST=ST/B
75 NEXT B
80 BEEP 1
85 ST=INT(ST) > für den Fall das sich eine Kommastelle einschleicht, kann bei zu hoher Einstellung durchaus passieren
90 PRINT"ERGEBNIS";ST
95 WAIT:PRINT
100 INPUT"NOCHMAL?";N$
105 IF N$="J" THEN GOTO 20
110 IFN$="N" THEN GOTO 115
115 PRINT"BEENDET"
120 END -
Ein Tool zum Steuern von netctl-auto@.service: https://github.com/gandro/netctl-auto-cli
Code
Alles anzeigenUsage: nacli {COMMAND} [PROFILE] [--help|--version] Commands: list List available profiles current List currently active profiles reconnect Reconnect all interfaces disconnect Disconnect all interfaces enable-all Enable all profiles for automatic connection disable-all Disable all profiles for automatic connection enable [PROFILE] Enable a single profile for automatic connection disable [PROFILE] Disable a single profile for automatic connection switch-to [PROFILE] Switch to a profile, disable all others
Das eigentliche Code-Schnippsel ist mit 200 Zeilen etwas gross für den Beitrag.
-
Kleines PowerShell-Skript zum Ver- und Entschlüsseln mit GnuPG.
Code
Alles anzeigen$gpgid = "BDBCA604" $gpgcommand = "gpg2" foreach ($file in $args) { $source = Get-Item -ErrorAction:SilentlyContinue $file if ($source -and -not $source.PSIsContainer) { if ($source.Name.ToLower().EndsWith(".gpg")) { # entschlüsseln $target = $source.FullName.Substring(0, $source.FullName.Length - 4) & $gpgcommand "--decrypt" "--yes" "--output" $target $source } else { # verschlüsseln $target = $source.FullName + ".gpg" & $gpgcommand "--encrypt" "--sign" "--recipient" $gpgid "--output" $target $source } } }
Ggf. erweitere ich das noch so, dass es mir bei Verzeichnissen eine temporäre Zip-Datei anlegt und diese verschlüsselt.
EDIT: Habe ein Gist draus gemacht. -
Jetzt mitmachen!
Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!