Script – die besten Beiträge

Bashskript Problem?

Ich habe hier ein Bashskript, welches Dateien überwacht (noch nicht vollständig und absolut unoptimiert). Ich weiß, dass es Tools gibt, aber es ist ein Projekt für die Uni und deshalb ist Optimierung und Effizienz nicht wirklich wichtig. Ich möchte damit die Grundlagen des Shellscriptings einfach etwas lernen.

Das ist bisher das Script:

#!/bin/bash


echo "Das Skript wurde gestartet. Der Typ Ihres Betriebssystem ist "\"$OSTYPE\""."


# If-Abfrage, die das Betriebssystem erkennt und den Pfad zum überwachten Ordner oder Datei festlegt # HIER BITTE DIE PFADE ZUM ZU ÜBERWACHENDEN ORDNER EINTRAGEN   
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
    BASE_DIRECTORY=" " # Übergibt dem überwachten Ordner eine Variable, wenn Betriebssystem = Linux
elif [[ "$OSTYPE" == "darwin"* ]]; then
    BASE_DIRECTORY="/Users/name/Library/CloudStorage/GoogleDrive-email@gmail.com/Meine Ablage/Uni/TestOrdner" # Übergibt dem überwachten Ordner eine Variable, wenn Betriebssystem = MacOs
elif [[ "$OSTYPE" == "win32" || "$OSTYPE" == "msys" || "$OSTYPE" == "cygwin" ]]; then
    BASE_DIRECTORY="/g/Meine Ablage/Uni/TestOrdner" # Übergibt dem überwachten Ordner eine Variable, wenn Betriebssystem = Windows
else    
    echo "Das Betriebssystem ist unbekannt." # Wenn das Betriebssystem unbekannt ist, wird eine Fehlermeldung ausgegeben
    exit 1
fi


DIRECTORY="$BASE_DIRECTORY" # Pfad zum Ordner
FILE="$BASE_DIRECTORY/Datei.txt" # Pfad zur Datei   
FILE2="$BASE_DIRECTORY/Datei2.txt" # Pfad zur Datei2 


cd "$BASE_DIRECTORY" || {
    echo "Wechsel zu $BASE_DIRECTORY fehlgeschlagen!" # Wechselt in den TestOrdner oder gibt eine Fehlermeldung aus
    exit 1;
}



# Funktion, um zu überprüfen, ob Dateien gelöscht wurden
checkIfDeleted() {
    if [ ! -f "$FILE" ]; then 
        echo "Die Datei \"$(basename "$FILE")\" wurde gelöscht, umbenannt oder verschoben."
    elif [ ! -f "$FILE2" ]; then
        echo "Die Datei \"$(basename "$FILE2")\" wurde gelöscht, umbenannt oder verschoben."
    elif [ ! -d "$DIRECTORY" ]; then
        echo "Der Ordner \"$(basename "$DIRECTORY")\" wurde gelöscht, umbenannt oder verschoben."
    fi
}


# Speichert den "ursprünglichen" Hash-Wert der Dateien
ORIGINAL_HASH=$(md5 -q "$FILE")
ORIGINAL_HASH2=$(md5 -q "$FILE2")


checkIfEdited() {
    if [ ! -f "$FILE" ]; then # Wenn $FILE nicht existiert, dann wird das Skript hier beendet
    return
    fi


    if [ ! -f "$FILE2" ]; then # Wenn $FILE2 nicht existiert, dann wird das Skript hier beendet
    return
    fi


    if [ ! -d "$DIRECTORY" ]; then # Wenn $DIRECTORY nicht existiert, dann wird das Skript hier beendet
    return
    fi


    # Berechnet den aktuellen Hash-Wert der Dateien
    CURRENT_HASH=$(md5 -q "$FILE")
    CURRENT_HASH2=$(md5 -q "$FILE2")


    # Hash-Werte werden verglichen
    if [ "$CURRENT_HASH" != "$ORIGINAL_HASH" ]; then
        echo "Die Datei \"$(basename "$FILE")\" wurde bearbeitet."
        # Ursprünglicher Hash-Wert wird für zukünftige Überprüfungen aktualisiert
        ORIGINAL_HASH="$CURRENT_HASH"
    elif [ "$CURRENT_HASH2" != "$ORIGINAL_HASH2" ]; then
        echo "Die Datei \"$(basename "$FILE2")\" wurde bearbeitet."
        # Ursprünglicher Hash-Wert wird für zukünftige Überprüfungen aktualisiert
        ORIGINAL_HASH2="$CURRENT_HASH2"
    fi
}


while true; do # Endlosschleife, die die Funktionen "checkIfDeleted" und "checkIfEdited" alle 10 Sekunden ausführt
    checkIfDeleted
    checkIfEdited
    sleep 10
done

Ja, ich weiß, welche Probleme das Skript mit sich bringt, aber ich habe ein anderes Problem:

Wenn jemand das Skript nutzen möchte, muss er die Pfade seiner Dateien einfügen und sogar neue Variablen definieren.

Man könnte das doch so machen, dass das Skript die Liste des Ordners einliest und dann auf alle Dateien direkt zugreifen muss, ohne dass man sie in das Skript einfügen muss.

Also irgendwie mit dem Befehl "ls". Ich weiß aber nicht, wie ich das implementieren soll.

Kann mir wer helfen bitte?

Visual Basic, Linux, HTML, Webseite, VBA, Bash, Batch, cmd, Code, lua, MySQL, PHP, Programmiersprache, Python, Script, Python 3

Powershell Error aber wo?

Ich hab ein Python error, suche seit hundert Jahren, wo der Fehler sein könnte, ich versteh nichts mehr, nach fast 36 Stunden Programmieren.

Spoofing...
Fehler: In C:\Users\Marcel\Documents\programmieren\aimware\spoofer\spoofer.ps1:17 Zeichen:13
+     } catch {
+             ~
Die schlieáende "}" fehlt im Anweisungsblock oder der Typdefinition.
In C:\Users\Marcel\Documents\programmieren\aimware\spoofer\spoofer.ps1:8 Zeichen:25
+ function Set-MacAddress {
+                         ~
Die schlieáende "}" fehlt im Anweisungsblock oder der Typdefinition.
In C:\Users\Marcel\Documents\programmieren\aimware\spoofer\spoofer.ps1:62 Zeichen:151
+ ... lÇôschen, MAC-Adresse ÇÏndern, neue UUID generieren)? (y/n)") -eq "y" ...
+                                                                 ~
Unerwartetes Token ")" in Ausdruck oder Anweisung.
In C:\Users\Marcel\Documents\programmieren\aimware\spoofer\spoofer.ps1:62 Zeichen:160
+ ... schen, MAC-Adresse ÇÏndern, neue UUID generieren)? (y/n)") -eq "y") {
+                                                                       ~
Unerwartetes Token ")" in Ausdruck oder Anweisung.
In C:\Users\Marcel\Documents\programmieren\aimware\spoofer\spoofer.ps1:79 Zeichen:3
+ } else {
+   ~~~~
Unerwartetes Token "else" in Ausdruck oder Anweisung.
In C:\Users\Marcel\Documents\programmieren\aimware\spoofer\spoofer.ps1:83 Zeichen:37
+ Write-Host "Press any key to exit..."
+                                     ~
Die Zeichenfolge hat kein Abschlusszeichen: ".
In C:\Users\Marcel\Documents\programmieren\aimware\spoofer\spoofer.ps1:79 Zeichen:8
+ } else {
+        ~
Die schlieáende "}" fehlt im Anweisungsblock oder der Typdefinition.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : MissingEndCurlyBrace



Script:

function Generate-RandomMacAddress {
    $rand = New-Object Random
    $macBytes = @(0..5 | ForEach-Object { $rand.Next(256) })
    $macBytes[0] = ($macBytes[0] -bor 2) -band 254
    return -join ($macBytes | ForEach-Object { "{0:X2}" -f $_ }) -replace '(.{2})', '$1-' | ForEach-Object { $_.TrimEnd('-') }
}


function Set-MacAddress {
    param (
        [string]$adapterName,
        [string]$macAddress
    )


    try {
        Get-NetAdapter -Name $adapterName | Set-NetAdapter -MacAddress $macAddress -Confirm:$false
        Write-Host "MAC-Adresse von $adapterName geändert auf $macAddress"
    } catch {
        Write-Host "Fehler beim Ändern der MAC-Adresse: $_"
    }
}


function Remove-RegistryKeys {
    $registryPath = "HKLM:\SOFTWARE"
    $epicGamesKeys = Get-ChildItem -Path $registryPath -Recurse | Where-Object { $_.Name -like "*Fortnite*" -or $_.Name -like "*Epic Games*" }
    foreach ($key in $epicGamesKeys) {
        try {
            Remove-Item -Path $key.PSPath -Recurse -Force
            Write-Host "Registry-Schlüssel gelöscht: $($key.PSPath)"
        } catch {
            Write-Host "Fehler beim Löschen des Schlüssels $($key.PSPath): $_"
        }
    }
}


function Remove-GameFolders {
    $fortnitePath = "C:\Program Files\Epic Games\Fortnite"
    $epicGamesPath = "C:\Program Files\Epic Games"


    if (Test-Path $fortnitePath) {
        Remove-Item -Path $fortnitePath -Recurse -Force
        Write-Host "Fortnite gelöscht: $fortnitePath"
    } else {
        Write-Host "Fortnite nicht gefunden: $fortnitePath"
    }


    if (Test-Path $epicGamesPath) {
        Remove-Item -Path $epicGamesPath -Recurse -Force
        Write-Host "Epic Games gelöscht: $epicGamesPath"
    } else {
        Write-Host "Epic Games nicht gefunden: $epicGamesPath"
    }
}


function Get-MainboardUUID {
    return (Get-WmiObject Win32_ComputerSystemProduct).UUID
}


function Generate-NewUUID {
    return [Guid]::NewGuid().ToString()
}


if ((Read-Host "Möchten Sie alle Änderungen vornehmen (Registry löschen, Spiele-Ordner löschen, MAC-Adresse ändern, neue UUID generieren)? (y/n)") -eq "y") {
    Remove-RegistryKeys
    Remove-GameFolders


    if ((Get-NetAdapter | Where-Object { $_.Status -eq "Up" }).Count -gt 0) {
        $networkAdapterName = "Ethernet"
        $newMacAddress = Generate-RandomMacAddress
        Set-MacAddress -adapterName $networkAdapterName -macAddress $newMacAddress
    } else {
        Write-Host "Kein aktiver Netzwerkadapter gefunden."
    }


    $mainboardUUID = Get-MainboardUUID
    Write-Host "Aktuelle Mainboard UUID: $mainboardUUID"


    $newMainboardUUID = Generate-NewUUID
    Write-Host "Neue zufällige Mainboard UUID: $newMainboardUUID"
} else {
    Write-Host "Änderungen übersprungen."
}


Write-Host "Press any key to exit..."
[System.Console]::ReadKey() | Out-Null

abgesehen davon das die Powershell sich nach dem Start direkt schließt.

Wer weiß, wo das Problem ist, wäre Top.


Script, PowerShell

Meistgelesene Beiträge zum Thema Script