Bash Tutorial
Erste Schritte mit Bash
Suche…
Versionen
Ausführung | Veröffentlichungsdatum |
---|---|
0,99 | 1989-06-08 |
1,01 | 1989-06-23 |
2,0 | 1996-12-31 |
2,02 | 1998-04-20 |
2,03 | 1999-02-19 |
2,04 | 2001-03-21 |
2,05b | 2002-07-17 |
3,0 | 2004-08-03 |
3.1 | 2005-12-08 |
3.2 | 2006-10-11 |
4,0 | 2009-02-20 |
4.1 | 2009-12-31 |
4.2 | 2011-02-13 |
4.3 | 2014-02-26 |
4.4 | 2016-09-15 |
Hallo Welt mit Variablen
Erstellen Sie eine neue Datei namens hello.sh
mit dem folgenden Inhalt und erteilen Sie ihr ausführbare Berechtigungen mit chmod +x hello.sh
.
Ausführen / Ausführen über:
./hello.sh
#!/usr/bin/env bash
# Note that spaces cannot be used around the `=` assignment operator
whom_variable="World"
# Use printf to safely output the data
printf "Hello, %s\n" "$whom_variable"
#> Hello, World
Bei der Ausführung wird Hello, World
als Standardausgabe ausgegeben.
Um bash zu sagen, wo sich das Skript befindet, müssen Sie sehr spezifisch sein, indem Sie es auf das übergeordnete Verzeichnis zeigen, normalerweise mit ./
wenn es sich um Ihr Arbeitsverzeichnis handelt .
ist ein Alias für das aktuelle Verzeichnis. Wenn Sie das Verzeichnis nicht angeben, versucht bash
, das Skript in einem der Verzeichnisse zu finden, die in der Umgebungsvariablen $PATH
sind.
Der folgende Code akzeptiert ein Argument $1
, das das erste Befehlszeilenargument ist, und gibt es in einer formatierten Zeichenfolge nach Hello,
.
Ausführen / Ausführen über:
./hello.sh World
#!/usr/bin/env bash
printf "Hello, %s\n" "$1"
#> Hello, World
Es ist wichtig zu wissen, dass $1
in Anführungszeichen und nicht in Anführungszeichen gesetzt werden muss. "$1"
nach Wunsch zum ersten Befehlszeilenargument erweitert, während '$1'
zu der Literalzeichenfolge $1
ausgewertet wird.
Sicherheitshinweis:
Lesen Sie die Sicherheitsaspekte des Vergessens, eine Variable in Bash-Shells zu zitieren, um zu verstehen, wie wichtig es ist, den variablen Text in Anführungszeichen zu setzen.
Hallo Welt
Interaktive Shell
Die Bash-Shell wird häufig interaktiv verwendet: Sie können Befehle eingeben und bearbeiten und dann ausführen, wenn Sie die Eingabetaste drücken. Viele Unix-basierte und Unix-ähnliche Betriebssysteme verwenden Bash als Standardshell (insbesondere Linux und macOS). Das Terminal startet beim Start automatisch einen interaktiven Bash-Shell-Prozess.
Geben Sie Hello World
indem Sie Folgendes eingeben:
echo "Hello World"
#> Hello World # Output Example
Anmerkungen
Sie können die Shell ändern, indem Sie einfach den Namen der Shell in terminal eingeben. Zum Beispiel:
sh
,bash
usw.echo
ist ein in Bash eingebauter Befehl, der die empfangenen Argumente in die Standardausgabe schreibt. Standardmäßig wird eine neue Zeile an die Ausgabe angehängt.
Nicht interaktive Shell
Die Bash-Shell kann auch nicht interaktiv von einem Skript aus ausgeführt werden, sodass die Shell keine menschliche Interaktion erfordert. Interaktives Verhalten und Skriptverhalten sollten identisch sein - eine wichtige Überlegung beim Design der Unix V7-Bourne-Shell und des transitiven Bash. Daher kann alles, was in der Befehlszeile ausgeführt werden kann, zur Wiederverwendung in eine Skriptdatei eingefügt werden.
Führen Sie die folgenden Schritte aus, um ein Hello World
Skript zu erstellen:
Erstellen Sie eine neue Datei namens
hello-world.sh
touch hello-world.sh
Machen Sie das Skript ausführbar, indem Sie
chmod
+x hello-world.sh
Fügen Sie diesen Code hinzu:
#!/bin/bash echo "Hello World"
Zeile 1 : Die erste Zeile des Skripts muss mit der Zeichenfolge
#!
, genannt Shebang 1 . Der shebang weist das Betriebssystem an,/bin/bash
, die Bash-Shell, auszuführen und übergibt den Pfad des Skripts als Argument.ZB
/bin/bash hello-world.sh
Zeile 2 : Verwendet den Befehl
echo
, umHello World
in die Standardausgabe zu schreiben.
hello-world.sh
Skripthello-world.sh
von der Befehlszeile aus mit einer der folgendenhello-world.sh
aus:-
./hello-world.sh
- am häufigsten verwendet und empfohlen -
/bin/bash hello-world.sh
-
bash hello-world.sh
- vorausgesetzt, dass/bin
in Ihrem$PATH
-
sh hello-world.sh
-
Für den realen Produktionsbetrieb würden Sie die Erweiterung .sh
weglassen (was ohnehin irreführend ist, da dies ein Bash-Skript und kein sh
Skript ist) und die Datei möglicherweise in ein Verzeichnis innerhalb Ihres PATH
sodass Sie unabhängig davon verfügbar sind Ihr aktuelles Arbeitsverzeichnis, genau wie ein Systembefehl wie cat
oder ls
.
Häufige Fehler sind:
chmod +x hello-world.sh
vergessen, die Ausführungsberechtigung für die Datei anzuwenden, z. B.chmod +x hello-world.sh
, führt dies zur Ausgabe von./hello-world.sh: Permission denied
.Bearbeiten des Skripts unter Windows, wodurch falsche Zeilenendezeichen erzeugt werden, die Bash nicht verarbeiten kann.
Ein häufiges Symptom ist
: command not found
wenn der Wagenrücklauf den Cursor an den Zeilenanfang gezwungen hat und den Text vor dem Doppelpunkt in der Fehlernachricht überschreibt.Das Skript kann mit dem Programm
dos2unix
werden.Ein Beispiel dafür:
dos2unix hello-world.sh
dos2unix
bearbeitet die Datei inline.Wenn Sie
sh ./hello-world.sh
,sh ./hello-world.sh
nicht, dassbash
undsh
unterschiedliche Shells mit unterschiedlichen Features sind (obwohl Bash rückwärtskompatibel ist, ist der gegenteilige Fehler harmlos).Es ist auf jeden Fall vorzuziehen, sich einfach auf die Shebang-Linie des Skripts zu verlassen, als explizit
bash
odersh
(oderpython
oderperl
oderawk
oderruby
oder ...) vor dem Dateinamen jedes Skripts zu schreiben.Eine gebräuchliche Shebang-Zeile, mit der Sie Ihr Skript portabler machen können, ist die Verwendung von
#!/usr/bin/env bash
anstatt einen Pfad zu Bash fest zu codieren. Auf diese Weise muss/usr/bin/env
existieren, aber danach mussbash
nur auf IhremPATH
. Auf vielen Systemen ist/bin/bash
nicht vorhanden, und Sie sollten/usr/local/bin/bash
oder einen anderen absoluten Pfad verwenden. Diese Änderung vermeidet, die Details davon herausfinden zu müssen.
1 Wird auch als sha-bang, hashbang, pound-bang, hash pling bezeichnet.
Anzeigen von Informationen zu den integrierten Bash-Inhalten
help <command>
Dadurch wird die Bash-Hilfeseite (Handbuch) für das angegebene integrierte Gerät angezeigt.
Zum Beispiel zeigt die help unset
:
unset: unset [-f] [-v] [-n] [name ...] Unset values and attributes of shell variables and functions. For each NAME, remove the corresponding variable or function. Options: -f treat each NAME as a shell function -v treat each NAME as a shell variable -n treat each NAME as a name reference and unset the variable itself rather than the variable it references Without options, unset first tries to unset a variable, and if that fails, tries to unset a function. Some variables cannot be unset; also see `readonly'. Exit Status: Returns success unless an invalid option is given or a NAME is read-only.
Um eine Liste aller eingebauten Ins mit einer kurzen Beschreibung anzuzeigen, verwenden Sie
help -d
Hallo Welt mit Benutzereingabe
Das Folgende fordert einen Benutzer zur Eingabe auf und speichert diese Eingabe dann als Zeichenfolge (Text) in einer Variablen. Die Variable wird dann verwendet, um dem Benutzer eine Nachricht zu geben.
#!/usr/bin/env bash
echo "Who are you?"
read name
echo "Hello, $name."
Der Befehl read
hier liest eine Zeile von Daten von der Standardeingabe in den variablen name
. Diese wird dann mit $name
referenziert und mit echo
Standard echo
.
Beispielausgabe:
$ ./hello_world.sh
Who are you?
Matt
Hello, Matt.
Hier hat der Benutzer den Namen "Matt" eingegeben und dieser Code wurde verwendet, um Hello, Matt.
zu sagen Hello, Matt.
.
Wenn Sie während des Druckvorgangs etwas an den Variablenwert anhängen möchten, verwenden Sie den Variablennamen in geschweiften Klammern (siehe folgendes Beispiel):
#!/usr/bin/env bash
echo "What are you doing?"
read action
echo "You are ${action}ing."
Beispielausgabe:
$ ./hello_world.sh
What are you doing?
Sleep
You are Sleeping.
Wenn der Benutzer hier eine Aktion eingibt, wird während des Druckens "ing" an diese Aktion angehängt.
Benannte Argumente behandeln
#!/bin/bash
deploy=false
uglify=false
while (( $# > 1 )); do case $1 in
--deploy) deploy="$2";;
--uglify) uglify="$2";;
*) break;
esac; shift 2
done
$deploy && echo "will deploy... deploy = $deploy"
$uglify && echo "will uglify... uglify = $uglify"
# how to run
# chmod +x script.sh
# ./script.sh --deploy true --uglify false
Hallo Welt im "Debug" -Modus
$ cat hello.sh
#!/bin/bash
echo "Hello World"
$ bash -x hello.sh
+ echo Hello World
Hello World
Mit dem Argument -x
können Sie jede Zeile des Skripts durchgehen. Ein gutes Beispiel ist hier:
$ cat hello.sh
#!/bin/bash
echo "Hello World\n"
adding_string_to_number="s"
v=$(expr 5 + $adding_string_to_number)
$ ./hello.sh
Hello World
expr: non-integer argument
Der oben angezeigte Fehler reicht nicht aus, um das Skript zu verfolgen. Wenn Sie jedoch die folgende Methode verwenden, können Sie besser nachvollziehen, wo Sie den Fehler im Skript suchen.
$ bash -x hello.sh
+ echo Hello World\n
Hello World
+ adding_string_to_number=s
+ expr 5 + s
expr: non-integer argument
+ v=
Bedeutung des Zitierens in Strings
Quoting ist wichtig für die String-Erweiterung in Bash. Mit diesen können Sie steuern, wie die Bash Ihre Strings analysiert und erweitert.
Es gibt zwei Arten von Zitaten:
- Schwach : verwendet doppelte Anführungszeichen: "
- Stark : verwendet einfache Anführungszeichen: '
Wenn Sie Ihr Argument erweitern wollen, können Sie Weak Quoting verwenden :
#!/usr/bin/env bash
world="World"
echo "Hello $world"
#> Hello World
Wenn Sie Ihr Argument nicht erweitern wollen, können Sie Strong Quoting verwenden :
#!/usr/bin/env bash
world="World"
echo 'Hello $world'
#> Hello $world
Sie können auch Escape verwenden, um die Erweiterung zu verhindern:
#!/usr/bin/env bash
world="World"
echo "Hello \$world"
#> Hello $world
Für detailliertere Informationen außer Anfängerdetails können Sie hier fortfahren.