Wie erstelle ich eine Skriptdatei für Terminalbefehle?

114

Unter Windows kann ich eine Datei schreiben, die Befehle für cmd enthält (normalerweise .cmdoder .batDateien). Wenn ich auf diese Dateien cmd.exeklicke, werden die in der Datei enthaltenen Befehle geöffnet und ausgeführt.

Wie würde ich das in Ubuntu machen?

Ich bin sicher, dass dies ein Duplikat ist, aber ich kann meine Antwort nicht finden.
Es ähnelt diesen Fragen, aber sie beantworten die Frage nicht:

Speichern Sie häufig verwendete Terminalbefehle in einer Datei

CMD.exe Emulator in Ubuntu zum Ausführen der .cmd / .bat Datei

Seth
quelle

Antworten:

150

Es gibt zwei Methoden.

Am häufigsten wird zuerst eine Datei geschrieben. Stellen Sie sicher, dass die erste Zeile vorhanden ist

#!/bin/bash

Speichern Sie dann die Datei. Als nächstes markieren Sie die ausführbare Datei mitchmod +x file

Wenn Sie dann auf klicken (oder die Datei vom Terminal ausführen), werden die Befehle ausgeführt. Konventionell haben diese Dateien normalerweise keine Erweiterung. Sie können sie jedoch so .shoder auf andere Weise enden lassen.

Ein paar Anmerkungen:

  • Jede (und ich meine jede) Datei kann unter Linux ausgeführt werden, vorausgesetzt, die erste Zeile ist ein Pfad zu dem Programm, das die Datei interpretieren soll. Gängige Beispiele sind /bin/python, /bin/sh, /bin/dash, aber auch seltsam Ball Dinge funktionieren wie/bin/mysql
  • Bash ist eine vollständige Sprache. Es ist weitaus komplexer als cmd.exe in Windows. Es verfügt über eine starke Programmiersprache, die Funktionen, Schleifen, Bedingungen, Zeichenfolgenoperationen usw. unterstützt.
  • Diese Dokumente können bei Problemen hilfreich sein.
  • Wenn Sie die Datei nicht ausführbar machen möchten, können Sie sie ausführen, indem Sie sie als Argument an bash übergeben: bash file/to/run.sh

Ein einfaches Bash-Beispiel

#!/bin/bash  
echo "This is a shell script"  
ls -lah  
echo "I am done running ls"  
SOMEVAR='text stuff'  
echo "$SOMEVAR"

Die zweite Methode ist das Aufzeichnen von Befehlen mit script. Laufen Sie scriptdann einfach Sachen machen. Wenn Sie fertig sind, exiterstellen Typ und Skript eine Datei für Sie mit allen "Sachen", die Sie gemacht haben. Dies wird weniger häufig verwendet, eignet sich jedoch sehr gut zum Erstellen von Makros. man scriptFür mehr Information.

coteyr
quelle
Vielleicht möchten Sie Änderung , die /bin/bashzu /bin/sh, bash nicht einmal die Standardeinstellung für Ubuntu ist.
TC1
@ TC1 Es ist standardmäßig installiert, es spielt also keine Rolle, ob es der Standard ist oder nicht.
Carlos Campderrós
1
Ich möchte darauf hinweisen, dass /bin/dash(was /bin/shnormalerweise mit symbolisiert wird) viel schneller ist als Bash (ich habe ungefähr 15-mal schneller gemessen). Wenn möglich, /bin/dashfür Shell-Skripte verwenden :)
MiJyn
4
Wenn Sie sich im selben Ordner wie die Datei befinden, stellen Sie sicher, dass ./file.sh
coteyr
1
Ich habe beide Methoden ausprobiert, aber wenn ich versuche, auf die Bash-Skriptdatei zu doppelklicken, wird die Textdatei nur in geany / gedit geöffnet und kann bearbeitet werden. Ich möchte, dass das Skript beim Doppelklicken ausgeführt wird. Diese Frage enthält detailliertere Informationen zu dem, was ich tun möchte.
Thymaro
15

Sie wollen mit einem Shell-Skript in eine Datei schreiben? Hier sind einige Möglichkeiten:

touch file

Diese Methode erstellt einfach eine Datei. Wenn die Datei jedoch bereits vorhanden ist, ändert sie einfach das Änderungsdatum in die Zeit, zu der Sie diesen Befehl verwendet haben.

echo "text" > file

Diese Methode überschreibt den Inhalt von fileto text. Wenn Sie eine Datei löschen möchten, können Sie dies einfach tun:

echo "" > file

Angenommen, Sie möchten mehr als eine Zeile schreiben und möchten nicht Tausende von echoBefehlen verwenden, verwenden Sie diesen Befehl:

cat << EOF > file
test
test1
foo
bar
EOF

Dadurch können Sie mehrere Zeilen in einem Befehl schreiben. Der Inhalt von filewäre dann:

test
test1
foo
bar

Wenn Sie an eine Datei anhängen möchten, ersetzen Sie diese >durch >>.

Hoffe das hilft!


BEARBEITEN : Oh, ich verstehe, also würden Sie die Datei in gedit mit der .shErweiterung schreiben (optional, aber es ist eine gute Idee) und dann in einem Dateimanager mit der rechten Maustaste auf die Datei klicken, Eigenschaften-> Berechtigungen auswählen und prüfen Allow executing file as program. Dann können Sie darauf doppelklicken und es wird ausgeführt :). Wenn Sie dies auch im Terminal tun möchten, können Sie diesen Befehl ausführen, um es ausführbar zu machen (möglicherweise möchten Sie ihn voranstellen, sudowenn er Ihnen nicht gehört):

chmod +x file

Und um zu rennen:

./file
MiJyn
quelle
Eigentlich möchte ich eine Datei schreiben, die Terminalbefehle enthält, zum Beispiel gedit. Wenn ich dann auf diese Datei doppelklicke, werden diese Befehle im Terminal ausgeführt.
Seth
Tolle Antwort, rücksichtsvolles Update. Um einfach eine Datei zu erstellen, habe ich immer nur verwendettouch filename
TryTryAgain
@TryTryAgain, yep das ist eine einfache Methode, wahrscheinlich schneller als echo "" > file. Ist es in Ordnung, wenn ich diese Methode in meine Antwort einbeziehe?
MiJyn
@MiJyn Absolut einschließen, fühlen Sie sich frei. Vielen Dank
TryTryAgain
Wie kann ich es schaffen, irgendwo im Terminal zu laufen ... wie bei einem globalen Befehl?
Omer
14

Das Äquivalent zu Windows-Batchdateien sind Shell-Skripte, und ein hervorragender Leitfaden für die ersten Schritte ist Bash Scripting .

Zum größten Teil können Befehle, die Sie in die Befehlszeile eingeben können, in ein Shell-Skript eingefügt werden.

Einige Dinge, die sich von Windows-Batchdateien unterscheiden:

  • Es gibt verschiedene Befehlsinterpretierer, sogenannte Shells. Die Standardeinstellung ist bash, aber wenn Sie interessiert sind, gibt es andere, wie zsh, ksh, dash, perl, python usw.

  • Um ein Shell-Skript auszuführen, müssen Sie die Datei ausführbar machen, was Sie mit tun können chmod +x <filename>

  • In Ubuntu ist das aktuelle Verzeichnis nicht der Programm-Suchpfad, Sie müssen es also ausführen ./<filename>, nicht<filename>

  • Variablennamen sind es $<varname>nicht%<varname>%

  • Befehle in einem Shell-Skript werden standardmäßig nicht wie in einer Batch-Datei gedruckt.

  • Die Dateinamenerweiterung kann sein .shoder (üblicher) Sie müssen keine Erweiterung verwenden. Fügen Sie #!/bin/bashdie erste Zeile der Datei ein , die Ubuntu mitteilt, mit welchem ​​Programm die Datei ausgeführt werden soll.

  • Kommentare beginnen mit #, nicht mit rem.

Hoffe das hilft und viel Spaß beim Schreiben!

Ich glaube
quelle