Batch Script unter Linux nutzen

Revan335

Commander
Registriert
Aug. 2009
Beiträge
2.222
Hallo,

ich habe folgendes Batch Script:

Code:
@echo off
cd x: && goto WORKING
echo Laufwerk nicht vorhanden
ping -n 5 localhost > NUL
exit

:WORKING
echo Laufwerk vorhanden
ping -n 5 localhost > NUL

if exist x:\diesedatei.txt goto existiert
if NOT exist x:\diesedatei.txt goto existiertnicht

:existiert
echo Ja, diese Datei existiert!

set Quelle="X:\Test"
set Ziel="C:\Users\Test\Desktop\Projektwoche Oberstufe\Test"

set LOGFILE="C:\Users\Test\Desktop\Projektwoche Oberstufe\Test_Log.txt"

robocopy %Quelle% %Ziel% /XF /E /PURGE  /LOG+:%LOGFILE%

echo. >> %LOGFILE%
echo ----------------------------------------------------------------------------------- >> %LOGFILE%

ping -n 5 localhost > NUL

:existiertnicht
echo Nein, diese Datei gibt es nicht!

pause

exit

Funktioniert unter Windows genauso wie es sein soll.

Würde dies nur gerne auch unter Linux bzw. bei mir unter Ubuntu nutzen.

Wie kann ich dies realisieren, so dass auch unter Linux/Ubuntu geprüft wird, ob das Laufwerk und Datei vorhanden ist und dann die Daten vom Laufwerk auf den PC kopiert werden?

Kenne mich mit Linux/Ubuntu noch nicht so gut aus.

Danke schon mal für Eure Hilfe.

Gruß

Revan335
 
Such mal nach Bash-Skripten / Befehle ist weitaus mächtiger als die CMD und was man mit der CMD abbilden kann, kann man auch mit einem .sh Skript ausführen, umgekehrt ist das nicht immer gegeben.

Laufwerksbuchstaben gibt es in Linux natürlich nicht. ;)
 
Also ich habe ja keine Ahnung, was einige Zeilen da sollen, aber ich habe es trotzdem mal sinngemäß übersetzt.
Code:
#!/bin/bash

mountPoint=/mnt/hdd
mountCheck=$(mount | grep -c $mountPoint)
if [[ $mountCheck == 0 ]]; then
        echo "Not mounted"
        ping -c 5 localhost > /dev/null
        exit 3
fi

if [[ -e $mountPoint/someFile.txt ]]; then
        echo "File exists!"
        sourcePath="$mountPath/Test"
        destPath="/some/other/path"
        cp -r $sourcePath $destPath >> logFile.txt
        cat logFile.txt
        echo "--------------------------------------------------------------------->>"
        cat logFile.txt
        ping -c 5 localhost > /dev/null
else
        echo "File does not exist!"
fi

exit 0
Verzeih mir, dass ich mir die Funktion einiger Parameter der batch commands nicht nachgeschlagen habe. Ich bekomme vom bloßen Anblick Brechreiz. :p
 
Vielen Dank schon mal für die Hilfe.

Habe aber noch das Problem, dass er zwar das Laufwerk findet, aber "File does not exist!" ausgibt.

Code:
    #!/bin/bash
     
    mountPoint=/dev/sdc1
    mountCheck=$(mount | grep -c $mountPoint)
    if [[ $mountCheck == 0 ]]; then
    echo "Not mounted"
    ping -c 5 localhost > /dev/null
    exit 3
    fi
     
    if [[ -e $mountPoint/test.bat ]]; then
    echo "File exists!"
    sourcePath="$mountPath/Test"
    destPath="/home/test/Schreibtisch/Test/Test_Ziel"
    cp -r $sourcePath $destPath >> logFile.txt
    cat logFile.txt
    echo "--------------------------------------------------------------------->>"
    cat logFile.txt
    ping -c 5 localhost > /dev/null
    else
    echo "File does not exist!"
    fi
     
    exit 0

Anhang anzeigen 382445 2013-12-05 22_14_24-Ubuntu.jpg
 
Zuletzt bearbeitet:
du müsstest auch schon ein richten Pfad angeben.
Der von dir angegebene Pfad "/dev/sdc1" führt nur zum Device.
Dieses ist dann wiederum an einer bestimmte stelle eingehängt(gemounted), z.B. "/home".
 
Danke für den Hinweis.

Hat funktioniert.

Aber wieso funktioniert es über die Variable nicht ?

Ubuntu weiß doch an welcher Stelle dev/sdc1 eingehangen ist.

/dev/sdc1 on /media/test/FLOPPY gibt er mir ja bei mount aus.
 
/dev/sdc ist keine Variable für den Mount Point, es ist das Gerät selbst, und Kommandos, die du zu der Datei schickst, die eigentlich ja gar keine Datei ist, gehen an das Gerät. Auf die Dateien auf dem Gerät kannst du darüber nicht zugreifen, dafür gibt es den Mount Point.
 
So funktioniert es.

Code:
    #!/bin/bash
     
    mountPoint=/dev/sdc1
    mountCheck=$(mount | grep -c $mountPoint)
    if [[ $mountCheck == 0 ]]; then
    echo "Not mounted"
    ping -c 5 localhost > /dev/null
    exit 3
    fi
     
    if [[ -e /media/test/FLOPPY/test.bat ]]; then
    echo "File exists!"
    sourcePath="/media/test/FLOPPY/Test"
    destPath="/home/test/Schreibtisch/Test/Test_Ziel"
    cp -r $sourcePath $destPath >> logFile.txt
    cat logFile.txt
    echo "--------------------------------------------------------------------->>"
    cat logFile.txt
    ping -c 5 localhost > /dev/null
    else
    echo "File does not exist!"
    fi
     
    exit 0

Ich glaube jetzt weiß ich was du meinst.

Ich soll oben statt "mountPoint=/dev/sdc1" "mountPoint=/media/test/FLOPPY" schreiben.
 
Zuletzt bearbeitet:
Ja. Allerdings benutzt du den Wert der Variable mountPoint ja nirgends mehr. Hast alles hart reingecodet. Kann man natürlich machen, dafür musst du dann aber, sobald der mount point sich mal ändert, alle Stellen im Script erwischen, die den alten mount point stehen haben. Daher lohnt es sich solche Sachen in Variablen zu setzen und dann natürlich auch zu verwenden. Ist pflegeleichter.

Mir ist immer noch schleierhaft, wozu das gepinge da ist. Wenn du eine Pause willst, kannst du einfach sleep 5 schreiben. Auch die doppelte Ausgabe der logfile.txt leuchtet mir nicht ein, bzw. wenn du einfach nur ein log schreiben willst und trotzdem auf der Konsole die Ausgabe sehen willst, dann schau dir mal tee an.

Ansonsten - schön, dass es nun tut, was du willst. Shell scripting lernen lohnt sich und obwohl die Syntax gewöhnungsbedürftig ist, ist sie um längen hübscher als batch.
 
Zurück
Oben