Kommandozeilenargumente

Kommandozeilenargumente
In vielen Fällen erfordern Bash -Skripte Argumentwerte, um Eingabemöglichkeiten für das Skript bereitzustellen. Sie können Befehlszeilenargumente in einem Bash-Skript auf zwei Arten verarbeiten. Einer ist durch die Verwendung Argumentvariablen, und ein anderer ist durch die Verwendung die Getopts Funktion. Wie Sie mit Befehlszeilenargumenten umgehen können, wird in diesem Tutorial angezeigt.

Verwenden von Argumentvariablen:

Die Argumentvariable beginnt ab $ 0. Der Hauptdateiname des Hauptskripts wird in $ 0 gespeichert, was Argumentwerte aus Befehlszeilenargumenten empfängt. Wenn in der Befehlszeile zwei Argumente übergeben werden, werden nacheinander die Argumentwerte in 1- und 2-Dollar-Variablen empfangen.

Beispiel -1: Senden von drei numerischen Werten in den Befehlszeilenargumenten

Erstellen Sie eine Bash -Datei mit dem folgenden Skript. Das Skript erhält Dreiargument-Werte und speichert sie in Variablen von 1, $ 2 und 3 US-Dollar. Es zählt die Gesamtzahl der Argumente und Druckargumentwerte mit einer Schleife ohne Schleife. Die Summe aller Argumentwerte wird später gedruckt.

#!/Bin/Bash
# Gesamtzahl der Argumente zählen
echo "Gesamtzahl der Argumente: $#"
# Argumentenwerte einzeln lesen
Echo "Erster Argumentwert: $ 1"
Echo "Zweiter Argumentwert: $ 2"
Echo "Dritter Argumentwert: $ 3"
# Argumentenwerte mithilfe der Schleife lesen
für Argval in "$@"
Tun
echo -n "$ argval"
Erledigt
# Argumentwerte hinzufügen
sum = $ (($ 1+$ 2+$ 3))
# Drucken Sie das Ergebnis aus
echo -e "\ nResult of sum = $ sum"

Die folgende Ausgabe wird nach der Ausführung der Skriptdatei mit drei numerischen Argumentwerten, 50, 35 und 15.

$ bash cmdline1.Sh 50 35 15

Beispiel -2: Dateiname als Argument nehmen

Erstellen Sie eine Bash -Datei mit dem folgenden Skript, um die Gesamtzahl der Zeichen einer Datei zu zählen. Hier wird der Dateiname als Befehlszeilenargument übergeben.

#!/Bin/Bash
Dateiname = $ 1
TotalChar = 'WC -c $ Dateiname'
Echo "Gesamtzahl der Zeichen ist $ TotalChar"

Führen Sie das Bash -Skript mit dem Dateinamen als einzelner Argumentwert aus und führen Sie einen anderen Befehl aus, um die Gesamtzahl der Zeichen dieser Datei zu überprüfen. Hier, der Wochentag.Die TXT -Datei wird als Argumentwert verwendet. Die Gesamtzahl der Zeichen am Wochentag.Die TXT -Datei ist 57.

$ bash cmdline2.Shwochtag.txt
$ wc -c wochentag.txt

Verwenden der GetOpts -Funktion:

Wenn Sie Daten in der Datenbank oder einer Datei speichern oder einen Bericht in einem bestimmten Format erstellen möchten, basierend auf den Werten für Befehlszeilen Argumente, dann der dann die Getopts Funktion ist die beste Option, um die Aufgabe zu erledigen. Es ist eine integrierte Linux-Funktion. Sie können diese Funktion also problemlos in Ihrem Skript verwenden, um formatierte Daten aus der Befehlszeile zu lesen.

Beispiel -3: Argumente durch GetOpts -Funktion lesen

Erstellen Sie eine Bash -Datei mit dem folgenden Skript, um die Verwendung der Verwendung zu verstehen Getopts Funktion. Die Funktion 'getopts' wird mit einer Weile-Schleife verwendet, um die Argumentoptionen und Argument-Werte von Befehlszeilen zu lesen. Hier werden 4 Optionen verwendet, die sind 'I', 'n', 'M' Und "E". Die Fallanweisung wird verwendet, um der jeweiligen Option zu entsprechen und den Argumentwert in einer Variablen zu speichern. Drucken Sie schließlich die Werte der Variablen aus.

#!/Bin/Bash
Während Getopts ": i: n: m: e:" arg; Tun
Fall $ arg in
i) id = $ optarg ;;
n) name = $ optarg ;;
m) Hersteller_Date = $ optarg ;;
e) expire_date = $ optarg ;;
ESAC
Erledigt
echo -e "\ n $ id $ name $ proveding_date $ expire_date \ n"

Führen Sie die Datei mit den folgenden Optionen und Argumentwerten aus. Hier, P100 ist der Wert von -i Option 'Heißer Kuchen"Ist der Wert der Option -n"01-01-2021'ist der Wert der Option -m und'06-01-2021'ist der Wert der Option -e.

$ bash cmdline3.sh -i p001 -n 'heißer Kuchen' -m '01 -01-2021 '-e '06 -01-2021'

Wenn Sie einfache Werte in einem Skript senden müssen, ist es besser, Argumentvariablen zu verwenden. Wenn Sie jedoch formatierte Daten senden möchten, ist es besser, die GetOpts -Funktion zu verwenden, um Argumentwerte abzurufen. Die Verwendungen beider Argumentvariablen und GetOpts -Optionen haben im nächsten Beispiel gezeigt.

Beispiel-4: Lesen normaler Argumente und Argumente mit GetOpts-Optionen

Die Möglichkeiten zum Lesen von Befehlszeilenargumenten mit Argumentvariablen und GETOPTS-Optionen wurden in früheren Beispielen dieses Tutorials getrennt gezeigt. Diese beiden Möglichkeiten können jedoch in einem einzigen Skript verwendet werden, um Befehlszeilenargumentwerte zu lesen. Erstellen Sie ein Bash -Skript mit dem folgenden Code, um die von GETOPTS -Optionen und Argumentparametern übergebenen Befehlszeilen -Argumentwerte zu lesen. Hier wurden drei GetOpts -Optionen verwendet, um den Hostnamen, den Benutzernamen und das Passwort der Befehlszeile zu lesen. Als nächstes wurde der Befehl "Shift" verwendet, um alle GetOpts -Optionen aus dem Befehl zu entfernen. In diesem Skript wird maximal drei Werte der Argumentvariablen gelesen und druckt. Wenn nach der Ausführung des Code kein Argumentwert ohne Option angegeben wird, wird eine Nachricht gedruckt. Andernfalls werden die Werte der Argumentvariablen gedruckt.

#!/Bin/Bash
# Argumente mit GetOpts -Optionen lesen
Während GetOpts 'H: u: p:' Option; Tun
Fall "$ option" in
H)
# Hostname drucken
echo "Der Hostname ist $ optarg" ;;
u)
# Benutzername drucken
Echo "Der Benutzername ist $ optarg" ;;
P)
# Passwort drucken
echo "Das Passwort ist $ optarg" ;;
*)
# Help -Nachricht für die Bereitstellung falscher Optionen drucken
Echo "Nutzung: $ 0 [-H-Wert] [-U-Wert] [-p-Wert]"> & 2
# Aus dem Skript enden
Ausgang 1 ;;
ESAC
Erledigt
# Entfernen Sie alle Optionen, die von GETOPTS -Optionen übergeben wurden
verschieben "$ (($ optind -1))"
# Erst normale Argumente lesen
Wenn [ ! -Z $ 1]; Dann
Echo "Der erste Tabellenname ist 1 $"
anders
echo "Es wird kein normales Argument angegeben."
Ausgang 1
fi
# Lesen der zweiten normalen Argumente
Wenn [ ! -Z $ 2]; Dann
Echo "Der zweite Tabellenname ist $ 2"
fi
# Lesen Sie dritte normale Argumente
Wenn [ ! -Z $ 3]; Dann
Echo "Der dritte Tabellenname ist $ 3"
fi

Die folgende Ausgabe wird angezeigt, wenn die falsche Option zum Zeitpunkt der Ausführung des Codes angegeben ist. Hier existiert Option -a im Skript nicht.

Die folgende Ausgabe wird angezeigt, wenn die gültigen Optionen mit den Werten zum Zeitpunkt der Ausführung des Codes in der Befehlszeile angegeben sind.

Die folgende Ausgabe wird angezeigt, wenn die gültigen Optionen und die normalen Argumentwerte zum Zeitpunkt der Ausführung des Code in der Befehlszeile verwendet werden. Hier sind die normalen Argumente Kunde Und Mitarbeiter.

Verwenden Sie '$@' für das Lesen von Befehlszeilenargumenten:

Die Befehlszeilenargumente können ohne Argumentvariablen oder GetOpts-Optionen gelesen werden. Verwendung '$@'Mit der ersten Halterung ist eine weitere Möglichkeit, alle Befehlszeilenargumentwerte zu lesen.

Beispiel-5: Reading-Befehlszeilenargumentwerte ohne Variable

Erstellen Sie eine Bash -Datei mit dem folgenden Skript, um die Argumentwerte ohne Argumentvariable zu lesen und die Summe der drei Befehlszeilenargumentwerte zu berechnen. "$@" Wurde mit den ersten Klammern hier verwendet, um alle Argumentwerte in ein Array zu lesen. Als nächstes wird die Summe der ersten drei Array -Werte gedruckt.

#!/Bin/Bash
# Lesen Sie alle Argumentewerte
argvals = ("$@")
# Überprüfen Sie die Gesamtzahl der Argumente
Wenn [$# -GT 2]
Dann
# Berechnen Sie die Summe von drei Befehlszeilenargumenten
sum = $ (($ argvals [0]+$ argvals [1]+$ argvals [2]))
Echo "Die Summe der 3 -Befehlszeilenargumente ist $ sum"
fi

Die folgende Ausgabe wird nach der Ausführung des obigen Skripts für die Argumentwerte 12, 20 und 90 angezeigt. Die Summe dieser Zahlen beträgt 122.

Abschluss:

Die Möglichkeiten zur Bereitstellung von Befehlszeilenargumentwerten ohne Option und mit Optionen haben hier gezeigt. Die Möglichkeit, die Befehlszeilenargumentwerte ohne Variablen zu lesen, hat auch hier auch gezeigt. Ich hoffe.