(Linux) Wie kann ich bei Linux eine .bat Datei erstellen die das Terminal öffnet und dann 3 Befehle ausführt?

6 Antworten

Hallo

Wie kann ich bei Linux eine .bat Datei erstellen

Dieser Dateityp

*.bat

ist eine Endung aus der Windows, genauer DOS Welt. Diese kann man zwar auch unter GNU/Linux erstellen aber nicht man wird es nicht ausführen können.Unter unixoiden Systemen nimmt man statt dessen Shell Scripte die die Endung

*.sh

haben (aber nicht brauchen).

Der Aufbau ist folgendermaßen:

#!/bin/bash               # Das ist der Shebang, der besagt an
# welchen Interpreter die folgenden
# Zeilen übergeben werden.
echo "Hallo $USER" # Das ist dann der erste einfache Befehl
# der den in Gänsefüßen stehenden Text
# auf stdout (meist der Bildschirm)
# ausgibt.
exit 0 # Damit wird das Script nach Durchlauf
# mit Rückgabewert 0 (fehlerfrei) beendet.

die das Terminal öffnet und dann 3 Befehle ausführt?

  • Da so ein Shell Script für gewöhnlich in einem Terminal ausgeführt wird ist diese Forderung etwas merkwürdig.
  • Du kannst das Script in einen "Starter packen" (wie das geht hängt vom verwendeten Desktop ab) der dann per Doppelklick das Script ausführt.
  • Darin können dann alle Kommandos stehen die nacheinander ausgeführt werden.

Dabei spielt es keine Rolle ob so:

#!/bin/bash
ls ; echo "Hallo Welt" ; ip a ; echo "Tschüss"
exit 0

oder so:

#!/bin/bash
ls
echo "Hallo Welt"
ip a
echo "Tschüss"
exit 0

angeordnet ist. Letzteres ist halt übersichtlicher weil man genau sieht welches Kommando an wievielter Stelle ausgeführt wird.

Selbstverständlich kann man auch interaktive Scripte erstellen die das ausführen was der User auswählt.

#!/bin/bash

echo 'MENU=(
0 Begrüßung
1 Anzeige von USB-Hardwareinformationen
2 Datum und Zeit ausgeben
3 Ende
)'

echo -n "Auswahl eingeben, mit ENTER bestaetigen: "
read ANTWORT

case $ANTWORT in

0)
echo "Hallo Welt"
;;

1)
lsusb
;;

2)
date
;;

3)
exit 0
esac

Linuxhase

Woher ich das weiß:eigene Erfahrung – Ich benutze seit 2007 Linux und habe LPIC101 und LPIC102
Isendrak  02.08.2017, 16:34

Dieser Dateityp *.bat

Ganz genau genommen ist *.bat nur ein Dateinamenmuster... ;)

ist eine Endung aus der Windows, genauer DOS Welt. Diese kann man zwar auch unter GNU/Linux erstellen aber nicht man wird es nicht ausführen können.

Ausser man macht z.B. das:

cat << __EOF__ > foo.bat
#!/bin/bash
echo "Hey! Was soll das? Seh ich etwa aus wie ein Windows/DOS System?"
__EOF__
chmod +x foo.bat

Ist zwar dann keine *.bat Datei im Sinne von DOS-Batch"script", aber das Dateinamenmuster stimmt und ausführbar isse auch... ;)

Man braucht nur etwas Fantasie... *zieht mit den Händen einen Regenbogen in den Raum und geht wieder in die Schachtel*

2

neben den bereits von anderen genannten Möglichkeiten, gibt es auch noch diese:

Schreibe alle gewünschten Befehle zeilenweise in eine Datei und schon ist die Batch-Datei fertig.

Die Abarbeitung dieses Stapels geht ganz einfach mit

.   <Batch-Datei>

Ob da hinten .bat oder nichts oder .doc oder .... dran steht ist unerheblich.
Wichtig ist der Punkt , gefolgt von einem Leerzeichen und dem Dateinamen.

Zu beachten ist aber, dass nicht jede Shell das so handhabt. Die Linux-Standard-Shell ( bash),  die ksh , die zsh können es, die csh aber nicht.

Dabei spielt das Execute-Flag der Datei keine Rolle, sie muss einfach nur lesbar sein.

Woher ich das weiß:Berufserfahrung – openSuSE seit 1995

deine Frage haben ich bereits beantwortet. Beim 2. Lesen habe ich Zweifel, ob das wirklich deinem Anliegen entspricht.

Das mit dem Terminal habe ich ganz einfach weggelassen, weil man zur Ausführung von Befehlen kein Terminal benötigt, solange man die Befehle nicht eintippen muss.

Es ist aber auch möglich, aus einer Datei heraus ein Terminal zu starten und dann dort weitere Befehle auszuführen.
Das geht dann aus der ersten Datei heraus mit dem Eintrag:

xterm -e "<1.Befehl> ; <2.Befehl> ; <3.Befehl>   usw."

Nachteil ist, dass nach Abarbeitung (und Beendigung) des letzten Befehls auch das Terminal weg ist.

xterm -e "ls -l"

würde nur kurz aufflackern und weg ist alles, das ist in dieser Form also sinnlos.
Hier bleibt nur, die Ausgabe eines Befehls in eine Datei umzuleiten. Dafür
braucht man aber kein Terminal.
Einige Befehle, wie vi oder joe oder pico benötigen ein Terminal.
Man muss also wissen, was man warum macht.

Woher ich das weiß:Berufserfahrung – openSuSE seit 1995

die Datei kannst du nennen wie du möchtest, Inhalt ist dann sowas:

#!/bin/bash
Befehl1
Befehl2
Befehl3

Dann noch als ausführbar Kennzeichnen:

 chmod +x datei.bat

Und mit ./datei.bat starten.

Unter Linux gibt es keine Batch Dateien. Es gibt aber natürlich äquivalente Möglichkeiten. 

Du gibst also ein: nano gewünschter/pfad/zu/test.sh

Dann gibst du die gewünschten Befehle ein, jeder in eine Zeile, also z.B.:

firefox

google-chrome

atom


Dann drückst du STRG+O und danach STRG+X

Nun gibst du dem Programm die Berechtigung, sich zu starten:

chmod -R +x gewünschter/pfad/zu/test.sh


nun kannst du die Datei mit 


./gewünschter/pfad/zu/test.sh


ausführen.



PWolff  28.05.2017, 11:32

Wenn man das Script öfter braucht, kann man es auch in eins der Verzeichnisse für ausführbare Dateien schieben (vgl $PATH) (per sudo - die Verzeichnisse sind für normale Benutzer nur lesbar) - Zusatztipp: Dateinamenserweiterung (".sh") weglassen - spart Tipparbeit

Dann reicht es, den Namen des Scripts einzugeben

0
guenterhalt  28.05.2017, 14:00

Unter Linux gibt es keine Batch Dateien.

Naja, das ist so doch nicht korrekt.
Im englischen hat das Wort batch zwar auch andere Bedeutungen, wird in der Computertechnik/Software als "Stapel" interpretiert.
Eine Batch-Datei ist damit eine, die lediglich Zeile für Zeile deren Inhalte zur Ausführung anbietet.
Ausgeführt werden diese dann durch einen Interpreter, durch eine  Shell.

Da Microsoft die Dateinamen-Erweiterungen benutzt um damit seinem Betriebssystem (also Windows) und den darin laufenden Anwendungen zu sagen, wie diese zu behandeln sind, ist aus xxx.bat abzulesen, dass es sich um eine Microsoft-Batch-Datei handelt.

Unter Linux kann man für sich auch solche Regel einführen, für Linux selbst ist das unerheblich ( es ist Wurscht).

 

0
969669  28.05.2017, 14:04
@guenterhalt

Das ist mir schon klar. Ich habe mich mit Batch Datei konkret auf die .bat Syntax beschränkt, welche unter Windows einzuhalten ist. Die Shell ist nämlich unter Linux eine andere.

0