Neue Antwort schreiben 
 
Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Der Code-Schnippsel-Thread
mrshadowtux Offline
borsenrap

Beiträge: 558
Registriert seit: Jul 2019
Beitrag #801
RE: Der Code-Schnippsel-Thread
Naja, wo außer bei function()-Blöcken ntuzt Bash die schon normalerweise für Anfang und Ende von Blöcken?
(Dieser Beitrag wurde zuletzt bearbeitet: 14.06.2021 22:48 von mrshadowtux.)
14.06.2021 22:48
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
s4ndwichMakeR Offline
Realitätsfeinmotoriker‮

Beiträge: 5.155
Registriert seit: Jul 2008
Beitrag #802
RE: Der Code-Schnippsel-Thread
(14.06.2021 20:11)amok_alex schrieb:  Ebenso sollte man bei Bash-Scripten immer beachten, dass Schleifen mit dem Keyword 'do' eröffnet und mit 'done' abgeschlossen werden. Jedes mal vergess ich das nämlich, weil von anderen C-like-Sprachen gewohnt, die geschweiften Klammern den Beginn und das Ende des jeweiligen Blocks definieren. Nur haben die bei der Bash halt ne andere Funktion als den Beginn und Abschluss eines Anweisungsblocks zu kennzeichnen.

Das ist kein spezifisches Bash-Feature, sondern schon von der Bourne Shell geerbt. Stephen Bourne hatte nicht etwa C als Inspiration für die Strukturen, sondern ALGOL, wo eben mit Keywords statt mit Klammern gearbeitet wird. Auf den Maschinen der Zeit – da war ja selbst ASCII noch relativ neu – konnte man sich nicht darauf verlassen, dass man überhaupt eine große Auswahl an Klammern im Zeichensatz zur Verfügung hatte. Offenbar konnte man sich lediglich auf ( und ) verlassen, denn immerhin definiert ALGOL sogar Keywords für < und > als Vergleichsoperatoren (lt bzw. gt). Frühe Programmiersprachen waren stark naturalistisch mit echten Wörtern statt Zeichen, weil [A-Z] und rudimentäre Interpunktion und mathematische Symbole der kleinste gemeinsame Nenner der Zeichensätze war – außer vielleicht beim APL-Zeichensatz, der als Gegenteil hier deutlich hervorsticht. C setzte dann schon implizit auf ASCII-unterstützende Maschinen, auch wenn in The C Programming Language afair noch EBCDIC an einigen Stellen erwähnt wird (müsste bei mathematischen Operation auf char-Variablen wie z.B. für Case-Umwandlung der Fall sein).

• • • – • – – • – –
16.06.2021 08:48
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
tk1908 Offline
Unixer

Beiträge: 7.315
Registriert seit: Apr 2009
Beitrag #803
RE: Der Code-Schnippsel-Thread
Backup-Script
Code:
#!/bin/bash

echo "############################################"
echo "############################################"
echo "# Backup-Script                            #"
echo "# Author: tk1908                           #"
echo "# E-Mail: tk1908@tkbrew.net                #"
echo "#                                          #"
echo "############################################"
echo "############################################"

OS=$(uname)

echo OS=$(uname)


# ROOTPATH für Darwin vorerst im HOME, hier muss noch debuggt werden. Ordner-Erstellung unter Volumes schlägt scheinbar fehl.

case $OS in

  Linux)  
        ROOTPATH="/mnt"
        ;;


  Darwin)  
        ROOTPATH="${HOME}/Test"
        ;;
esac

echo Funktionsaufruf

HOSTS=(krypton keppler tesla)
SHARES=( $(showmount -e keppler | awk '{print $1}' | sed '1d' | sed 's/^\(\/.*\)\/\(.*\)$/\2/') )

# Shareliste wird von keppler abgerufen. So ist sichergestellt, dass alle Shares erfasst werden.





for HOST in "${HOSTS[@]}"; do sudo mkdir $ROOTPATH/$HOST; for SHARE in "${SHARES[@]}";do sudo mkdir $ROOTPATH/$HOST/$SHARE;  done; done

#tier2_Backup

function tier3_Backup () {
echo "Migrate Data from keppler to tesla"
echo "Creating Directorystructure an mounting shares"
for SHARE in "${SHARES[@]}"; do sudo mount ${HOSTS[2]}:/mnt/${HOSTS[2]}/$SHARE $ROOTPATH/${HOSTS[2]}/$SHARE; done
for SHARE in "${SHARES[@]}"; do sudo mount ${HOSTS[3]}:/mnt/xenon01/$SHARE $ROOTPATH/${HOSTS[3]}/$SHARE; done # Vorsicht Array in tesla heißt immernoch xenon01. Muss noch geändert werden!
rsync -rvu --exclude '#recycle' $ROOTPATH/${HOSTS[2]}/applications/ $ROOTPATH/${HOSTS[3]}/applications
rsync -rvu --exclude '#recycle' $ROOTPATH/${HOSTS[2]}/documents/ $ROOTPATH/${HOSTS[3]}/documents
rsync -rvu --exclude '#recycle' $ROOTPATH/${HOSTS[2]}/games/ $ROOTPATH/${HOSTS[3]}/games
rsync -rvu --exclude '#recycle' $ROOTPATH/${HOSTS[2]}/hoerspiele/ $ROOTPATH/${HOSTS[3]}/hoerspiele
rsync -rvu --exclude '#recycle' $ROOTPATH/${HOSTS[2]}/misc/ $ROOTPATH/${HOSTS[3]}/misc
rsync -rvu --exclude '#recycle' $ROOTPATH/${HOSTS[2]}/music/ $ROOTPATH/${HOSTS[3]}/music
rsync -rvu --exclude '#recycle' $ROOTPATH/${HOSTS[2]}/archive/porn/ $ROOTPATH/${HOSTS[3]}/porn
rsync -rvu --exclude '#recycle' $ROOTPATH/${HOSTS[2]}/videos/ $ROOTPATH/${HOSTS[3]}/videos
sudo umount /mnt/${HOSTS[2]}/*
sudo umount /mnt/${HOSTS[3]}/*
}

tier3_Backup

echo cleaning

sudo umount $SOURCEMOUNTPATH
sudo umount $TARGETMOUNTPATH
sudo rm -rf /mnt/*

Ausgabe
Code:
❯ /home/tkoehler/Git/Projekte/Home/Scripts/Unix-Shell/Backup
############################################
############################################
# Backup-Script                            #
# Author: tk1908                           #
# E-Mail: tk1908@tkbrew.net                #
#                                          #
############################################
############################################
OS=Linux
Funktionsaufruf
mkdir: cannot create directory ‘/mnt/krypton’: File exists
mkdir: cannot create directory ‘/mnt/krypton/wsusoffline’: File exists
mkdir: cannot create directory ‘/mnt/krypton/videos’: File exists
mkdir: cannot create directory ‘/mnt/krypton/music’: File exists
mkdir: cannot create directory ‘/mnt/krypton/hoerspiele’: File exists
mkdir: cannot create directory ‘/mnt/krypton/games’: File exists
mkdir: cannot create directory ‘/mnt/krypton/backups’: File exists
mkdir: cannot create directory ‘/mnt/krypton/archive’: File exists
mkdir: cannot create directory ‘/mnt/krypton/pictures’: File exists
mkdir: cannot create directory ‘/mnt/krypton/misc’: File exists
mkdir: cannot create directory ‘/mnt/krypton/documents’: File exists
mkdir: cannot create directory ‘/mnt/krypton/applications’: File exists
mkdir: cannot create directory ‘/mnt/keppler’: File exists
mkdir: cannot create directory ‘/mnt/keppler/wsusoffline’: File exists
mkdir: cannot create directory ‘/mnt/keppler/videos’: File exists
mkdir: cannot create directory ‘/mnt/keppler/music’: File exists
mkdir: cannot create directory ‘/mnt/keppler/hoerspiele’: File exists
mkdir: cannot create directory ‘/mnt/keppler/games’: File exists
mkdir: cannot create directory ‘/mnt/keppler/backups’: File exists
mkdir: cannot create directory ‘/mnt/keppler/archive’: File exists
mkdir: cannot create directory ‘/mnt/keppler/pictures’: File exists
mkdir: cannot create directory ‘/mnt/keppler/misc’: File exists
mkdir: cannot create directory ‘/mnt/keppler/documents’: File exists
mkdir: cannot create directory ‘/mnt/keppler/applications’: File exists
mkdir: cannot create directory ‘/mnt/tesla’: File exists
mkdir: cannot create directory ‘/mnt/tesla/wsusoffline’: File exists
mkdir: cannot create directory ‘/mnt/tesla/videos’: File exists
mkdir: cannot create directory ‘/mnt/tesla/music’: File exists
mkdir: cannot create directory ‘/mnt/tesla/hoerspiele’: File exists
mkdir: cannot create directory ‘/mnt/tesla/games’: File exists
mkdir: cannot create directory ‘/mnt/tesla/backups’: File exists
mkdir: cannot create directory ‘/mnt/tesla/archive’: File exists
mkdir: cannot create directory ‘/mnt/tesla/pictures’: File exists
mkdir: cannot create directory ‘/mnt/tesla/misc’: File exists
mkdir: cannot create directory ‘/mnt/tesla/documents’: File exists
mkdir: cannot create directory ‘/mnt/tesla/applications’: File exists
Migrate Data from keppler to tesla
Creating Directorystructure an mounting shares
mount.nfs: Protocol not supported
mount.nfs: Protocol not supported
mount.nfs: Protocol not supported
mount.nfs: Protocol not supported
mount.nfs: Protocol not supported
mount.nfs: Protocol not supported
mount.nfs: Protocol not supported
mount.nfs: Protocol not supported
mount.nfs: Protocol not supported
mount.nfs: Protocol not supported
mount.nfs: Protocol not supported
mount.nfs: mount point /mnt//wsusoffline does not exist
mount.nfs: mount point /mnt//videos does not exist
mount.nfs: mount point /mnt//music does not exist
mount.nfs: mount point /mnt//hoerspiele does not exist
mount.nfs: mount point /mnt//games does not exist
mount.nfs: mount point /mnt//backups does not exist
mount.nfs: mount point /mnt//archive does not exist
mount.nfs: mount point /mnt//pictures does not exist
mount.nfs: mount point /mnt//misc does not exist
mount.nfs: mount point /mnt//documents does not exist
mount.nfs: mount point /mnt//applications does not exist
sending incremental file list
rsync: [generator] recv_generator: mkdir "/mnt/applications" failed: Permission denied (13)
*** Skipping any contents from this failed directory ***
./

sent 42 bytes  received 19 bytes  122.00 bytes/sec
total size is 0  speedup is 0.00
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1330) [sender=v3.2.3]
sending incremental file list
rsync: [generator] recv_generator: mkdir "/mnt/documents" failed: Permission denied (13)
*** Skipping any contents from this failed directory ***
./

sent 42 bytes  received 19 bytes  122.00 bytes/sec
total size is 0  speedup is 0.00
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1330) [sender=v3.2.3]
sending incremental file list
rsync: [generator] recv_generator: mkdir "/mnt/games" failed: Permission denied (13)
*** Skipping any contents from this failed directory ***
./

sent 42 bytes  received 19 bytes  122.00 bytes/sec
total size is 0  speedup is 0.00
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1330) [sender=v3.2.3]
sending incremental file list
rsync: [generator] recv_generator: mkdir "/mnt/hoerspiele" failed: Permission denied (13)
*** Skipping any contents from this failed directory ***
./

sent 42 bytes  received 19 bytes  122.00 bytes/sec
total size is 0  speedup is 0.00
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1330) [sender=v3.2.3]
sending incremental file list
rsync: [generator] recv_generator: mkdir "/mnt/misc" failed: Permission denied (13)
*** Skipping any contents from this failed directory ***
./

sent 42 bytes  received 19 bytes  122.00 bytes/sec
total size is 0  speedup is 0.00
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1330) [sender=v3.2.3]
sending incremental file list
rsync: [generator] recv_generator: mkdir "/mnt/music" failed: Permission denied (13)
*** Skipping any contents from this failed directory ***
./

sent 42 bytes  received 19 bytes  122.00 bytes/sec
total size is 0  speedup is 0.00
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1330) [sender=v3.2.3]
sending incremental file list
rsync: [sender] change_dir "/mnt/tesla/archive/porn" failed: No such file or directory (2)

sent 19 bytes  received 12 bytes  62.00 bytes/sec
total size is 0  speedup is 0.00
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1330) [sender=v3.2.3]
sending incremental file list
rsync: [generator] recv_generator: mkdir "/mnt/videos" failed: Permission denied (13)
*** Skipping any contents from this failed directory ***
./

sent 42 bytes  received 19 bytes  122.00 bytes/sec
total size is 0  speedup is 0.00
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1330) [sender=v3.2.3]
umount: /mnt/tesla/applications: not mounted.
umount: /mnt/tesla/archive: not mounted.
umount: /mnt/tesla/backups: not mounted.
umount: /mnt/tesla/documents: not mounted.
umount: /mnt/tesla/games: not mounted.
umount: /mnt/tesla/hoerspiele: not mounted.
umount: /mnt/tesla/misc: not mounted.
umount: /mnt/tesla/music: not mounted.
umount: /mnt/tesla/pictures: not mounted.
umount: /mnt/tesla/videos: not mounted.
umount: /mnt/tesla/wsusoffline: not mounted.
umount: /mnt//keppler: not mounted.
umount: /mnt//krypton: not mounted.
umount: /mnt//tesla: not mounted.
cleaning
umount: bad usage
Try 'umount --help' for more information.
umount: bad usage
Try 'umount --help' for more information.
    /mnt 

Irgendjemand ne Idee, was hier falsch läuft? Wenn ich die function tier3_Backup definiere und dann ausführe, dann tut alles.

[Bild: Rz3JNLI.gif]
Meine Beiträge stehen unter der MIT-Lizenz:D

(09.04.2016 14:26)tk1908 schrieb:  externe HDD am Router? Klar ich tausch mein Auto gegen nen Tretroller mit Bremsklotz.
(Dieser Beitrag wurde zuletzt bearbeitet: 19.08.2021 12:11 von tk1908.)
19.08.2021 12:10
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Benjamin92 Offline
tauscht CMOS-Batterie per TeamViewer

Beiträge: 7.745
Registriert seit: Jul 2008
Beitrag #804
RE: Der Code-Schnippsel-Thread
Folgender Code gibt bei Windows 10 und Windows 11 exakt das selbe aus:
Code:
#include <windows.h>
#include <stdio.h>

int main()
{
    DWORD dwVersion = 0;
    DWORD dwMajorVersion = 0;
    DWORD dwMinorVersion = 0;
    DWORD dwBuild = 0;

    dwVersion = GetVersion();

    // Get the Windows version.

    dwMajorVersion = (DWORD)(LOBYTE(LOWORD(dwVersion)));
    dwMinorVersion = (DWORD)(HIBYTE(LOWORD(dwVersion)));

    // Get the build number.

    if (dwVersion < 0x80000000)
        dwBuild = (DWORD)(HIWORD(dwVersion));

    printf("Version is %d.%d (%d)\n",
                dwMajorVersion,
                dwMinorVersion,
                dwBuild);
}
16.01.2022 16:38
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
TAL Offline
機関車

Beiträge: 6.164
Registriert seit: Jul 2008
Beitrag #805
RE: Der Code-Schnippsel-Thread
FYI zum letzten Post:
Ist ja schliesslich auch seit Vorkriegszeiten so dokumentiert: https://docs.microsoft.com/en-us/windows...getversion

Füge ein entsprechendes Manifest hinzu und die Funktion wird die Version des entsprechenden Manifestes zurückgeben.

16.01.2022 16:41
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
DosAmp Offline
Anderes Zeigegerät

Beiträge: 12.170
Registriert seit: Jul 2008
Beitrag #806
RE: Der Code-Schnippsel-Thread
Ein Beispiel für den Umgang für read mit einer Pipeline:
Code:
#!/bin/bash
set -euo pipefail
shopt -s lastpipe

if [[ $# -lt 2 ]]; then
        echo "usage: $0 java_home weblogic_domain_dir"
        exit 1
fi
JAVA=$1/bin/java
DOMAIN_DIR=$2

if [[ ! -d $DOMAIN_DIR/bin ]]; then
        echo "Wrong domain directory"
        exit 1
fi
if [[ ! -x $JAVA ]]; then
        echo "No Java detected"
        exit 1
fi
"$JAVA" -version 2>&1 | head -n 1 | read -r jenv jverstr jversion
if [[ $jenv != java ]] || [[ ! $jversion =~ ^\"1.8.0_([0-9]+)\"$ ]]; then
        echo "Java version not detected as Oracle JDK 8"
        exit 1
fi

jupdate=${BASH_REMATCH[1]}
echo Java 8 update: $jupdate
if [[ $jupdate -ge 330 ]]; then
        echo "Appending setUserOverrides.sh..."
        cat << 'EOF' >> "$DOMAIN_DIR/bin/setUserOverrides.sh"

JAVA_OPTIONS="${JAVA_OPTIONS} -Dcom.sun.jndi.ldapURLParsing=legacy"
export JAVA_OPTIONS
EOF
else
        echo "Nothing to do."
fi

Standardmäßig führt Bash jedes Element einer Pipeline in seiner eigenen Subshell aus, was beim Idiom
Code:
Befehl | while read var1 var2 var3; do ...; done
nicht weiter auffällt und sogar oft wünschenswert ist, dass der äußere Geltungsbereich nicht mit $var1, $var2, $var3 verschmutzt wird.
Mit der Shell-Option lastpipe kann man seit Bash 4.2 in einem Shell-Skript (oder einer interaktiven Shell mit deaktiviertem Job Control) das letzte Element einer Pipeline ohne Subshell ausführen, sodass zum Beispiel wie hier Variablen nicht-flüchtig gesetzt werden können. Dieses Verhalten ist ansonsten nur in der originalen Korn-Shell (ksh93) zu finden, aber genauso wenig in pdksh/mksh.
ZSH und ältere Bash-Versionen müssen auf Prozessersetzung zurückgreifen, in anderen Shells geht dies nur mit einer temporären Datei:
Code:
read -r jenv jverstr jversion < <("$JAVA" -version 2>&1 | head -n 1)

♪ Weil man es für'n CI-Tool hält, hat man es da hingestellt — und sein Zweck: Greif hin, pack aus, kompilier, schmeiß weg. ♫
eval $(curl -s https://www.mozilla.org/en-US/firefox/releases/ | grep -o 'data-latest-firefox="[^"]*"' | tr - _)
export USER_AGENT="Mozilla/5.0 (OS/2; Warp 4.5; rv:${data_latest_firefox}) Gecko/20100101 Firefox/${data_latest_firefox}"
(Dieser Beitrag wurde zuletzt bearbeitet: 27.09.2022 15:50 von DosAmp.)
27.09.2022 15:48
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Neue Antwort schreiben 


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste