Befehle in einer Variablen im Bash-Skript ausführen
- Bash-Skriptvariable
-
Verwenden Sie den Befehl
Eval
, um Befehle in einer Variablen im Bash-Skript auszuführen -
Verwenden Sie
bash
mit dem Flag-c
, um Befehle in einer Variablen im Bash-Skript auszuführen -
Verwenden Sie die Befehlsersetzung
$()
, um Befehle in einer Variablen im Bash-Skript auszuführen
In dieser Anleitung geht es darum, einen Bash-Befehl in einer Variablen zu speichern und ihn später direkt aus dieser Variablen auszuführen. Zuerst werden wir mehrere Methoden zum Ausführen von Befehlen besprechen, die in einer Variablen enthalten sind, gefolgt von mehreren Skriptbeispielen.
Lass uns anfangen.
Bash-Skriptvariable
Variablen sind ein wesentliches Feature von Bash. Ob Sie sie in einer if
-Kontrollstruktur, einer case
-Struktur oder einfach innerhalb von Skripten verwenden, sie verschönern Ihre Skripte nicht nur, sondern erleichtern auch das Verständnis erheblich.
Sie können sie auch als Skripte ausführen, was das Leben besonders erleichtert, wenn Sie viele Befehle leiten und die Befehle sehr lang sind. Dadurch wird die Länge Ihres Skripts, das möglicherweise hundert Wörter lang ist, auf ein Wort reduziert, das möglicherweise nicht einmal ein Dutzend Wörter lang ist.
Stellen Sie sich vor, Sie debuggen ein Skript, das hundert Wörter lang ist, im Vergleich zu einem, das nicht einmal ein Dutzend Wörter lang ist; Denken Sie über die Zeit nach, die Sie sparen können.
Manchmal müssen wir Bash-Wrapper schreiben, die Befehle vom Benutzer entgegennehmen, sie in Variablen speichern und einige von ihnen bedingt ausführen, nachdem sie eine gewisse Geschäftslogik angewendet haben (vielleicht eine Reihe von if-else
-Entscheidungen). In diesen Szenarien müssen wir uns nun die Methoden ansehen, die uns beim Analysieren und Interpretieren des in Variablen gespeicherten Befehls helfen können, um ihn als Bash-Befehl auszuführen.
Hier werden wir einige der effizientesten Methoden zum Ausführen von Befehlen besprechen, die in einer Variablen enthalten sind.
Verwenden Sie den Befehl Eval
, um Befehle in einer Variablen im Bash-Skript auszuführen
Einige Bash-Skripte erfordern, dass Sie eine Zeichenfolge mit Eingabewerten oder Variablen (z. B.) erstellen und am Ende als Befehl ausführen. Der Befehl eval
ist in diesen Situationen die Antwort.
Um Parameter wie einen Shell-Befehl auszuwerten, verwenden Sie den Bash-Befehl eval
.
Der Shell-Befehl erhält eine Reihe von Argumenten und verwendet diese Zeichenfolge, um den Befehl auszuführen. Dann wird der Befehl in der aktuellen Shell von eval
ausgeführt.
Dieser Befehl ist nützlich, wenn Sie einen Befehl ausführen, der einen bestimmten Operator oder reservierte Begriffe verwendet.
Syntax:
eval [arguments...]
Argumente werden an diesen Befehl übergeben, als Zeichenfolgenliteral kombiniert und dann zur Ausführung an Bash gesendet. Dieser Befehl gibt den Exit-Status nach der Ausführung des Befehls zurück.
Wenn diesem Befehl keine Argumente übergeben werden oder Null übergeben wird, wird 0 als Exit-Status zurückgegeben.
Beispiel 1: Zählen Sie die Anzahl der Wörter in einer Datei.
Angenommen, wir haben eine Datei mysample.txt
, die einige Textzeilen enthält. Wenn wir die Anzahl der Wörter in dieser Datei zählen müssen, können wir den Befehl wc -w
verwenden.
Wir werden diese Aufgabe mit dem Befehl eval
ausführen. Das Bash-Skript lautet:
#!/bin/bash
wordcount="wc -w mysample.txt"
eval $wordcount
Schauen wir uns seine Ausgabe an:
Beispiel 2: Verwenden Sie mehrere Variablen, um den Befehl zu erstellen.
Angenommen, wir müssen eine Erklärung Willkommen bei Eval Command
drucken. Wir können dies mit dem Befehl eval
tun:
#!/bin/bash
var1="Welcome to Eval Command"
comm1="echo"
eval $comm2 $var1
In diesem Skript haben wir zwei Variablen erstellt, eine enthält die zu druckende Nachricht und die andere den echo
-Befehl. Wir übergeben diese beiden Variablen an den Befehl eval
, der den gesamten Befehl entsprechend aufbaut.
Nach der Ausführung dieses Skripts erhalten wir die folgende Ausgabe:
Beispiel 3: Drucken Sie die Werte von Variablen.
Im folgenden Beispiel drucken wir den Wert einer Variablen, die eine andere Variable enthält.
#!/bin/bash
str1="my script"
str2= str1
comm="echo "
eval $comm '$str2'
Die Ausgabe des obigen Skripts lautet:
Beispiel 4: Geben Sie die Summe der Zahlen aus.
Im folgenden Beispiel geben wir die Summe der Zahlen von 1 bis 4 aus, indem wir die for
-Schleife im Skript verwenden. Dann drucken wir diese Summe mit dem Befehl eval
.
Das Skript für dieses Problem lautet:
#!/bin/bash
sum=0
for n in {1..4}
do
sum=$(($sum+$n))
done
comm="echo 'The result of sum from 1-4 is: '"
eval $comm $sum
Die Ausgabe des obigen Skripts lautet:
Verwenden Sie bash
mit dem Flag -c
, um Befehle in einer Variablen im Bash-Skript auszuführen
Standardmäßig liest der Befehlsinterpreter bash
Befehle aus der Standardeingabe oder einer Datei und führt sie aus. Wenn jedoch das Flag -c
gesetzt ist, liest der bash
-Interpreter Befehle aus dem ersten String-Parameter (und es sollte sich um ein Nicht-Optionsargument handeln).
Daher können wir damit Befehle ausführen, die in einer Bash-String-Variablen gespeichert sind.
Das folgende Skript weist beispielsweise zuerst die Befehlszeichenfolge ls
der Variablen COMMAND
zu. Dann verwendet es den bash
-Interpreter mit dem -c
-Befehl, um die COMMAND
-Variable als Eingabe zu verwenden.
#!/bin/bash
COMMAND="ls"
bash -c $COMMAND
Der obige Befehl listet alle Verzeichnisse und Dateien im aktuellen Arbeitsverzeichnis der Skriptdatei auf.
Verwenden Sie die Befehlsersetzung $()
, um Befehle in einer Variablen im Bash-Skript auszuführen
Wir können die Befehlsersetzungsmethode verwenden, um den in einer Variablen gespeicherten Befehl wie folgt auszuführen:
#!/bin/bash
COMMAND="ls"
$(echo $COMMAND)