Ein Systemadministrator wird immer daran denken, die meisten seiner Aufgaben zu automatisieren, damit die Routineaufgaben einfach erledigt werden und er sich auf einige andere kritische Dinge konzentrieren kann. Eine solche Aufgabe ist die Erstellung eines Unix-Kontos. Hier werden wir sehen, wie wir mit Shell-Skript ein Unix-Konto erstellen können. Auf dieser Reise zum Erstellen von Shell-Skripten werden Sie, obwohl die Aufgabe einfach zu sein scheint, viele Dinge lernen !
1. Befolgen Sie während der Skripterstellung die Standardrichtlinien für eine bessere Lesbarkeit
Die meisten anderen Programmiersprachen wie C, C++, JAVA haben eine Reihe von „Best Practices“, die beim Codieren befolgt werden. Wie der Name jedoch schon sagt, handelt es sich bei Shell-Scripting um eine Art Programm, das für eine spezielle Laufzeitumgebung geschrieben wurde. Wenn Sie Best Practices befolgen, wird Ihr Skript besser lesbar, wiederverwendbar und wartbar.
In diesem Skript verwenden wir also Funktionen, um den Code zu modularisieren. Unteres Code-Snippet für die Funktion usage() :
usage() { echo "Usage: $PROGNAME [options] Options: -u username, Provide name for new user account creation -p password, Provide complex password -h help, display this help message and exit " exit 1; }
Diese Verwendungsfunktion wird immer dann aufgerufen, wenn Hilfe beim Ausführen des Skripts oder bei falschen Argumenten usw. benötigt wird,
2. Wie akzeptiert man Argumente in einem Shell-Skript
In einem Shell-Skript werden Argumente wie folgt akzeptiert:
$0 - Script Name $1 - First argument $2 - Second argument $# - No. of arguments $@ - All arguments
Beispiel:
Tue Oct 29>$./account_creation.sh username password
Im obigen Beispiel ist $0 account_creation.sh, $1 ist Benutzername und $2 ist Passwort. $# gibt 2 zurück und $@ gibt alle Argumente zurück.
3. Befehlszeilenoptionen mit „Getopt“ im Shell-Skript
Das Bereitstellen von Befehlszeilenoptionen ist eine bessere Möglichkeit, Ihr Skript dem Benutzer zu präsentieren. Sie können Skripts schreiben, die sowohl kurze als auch lange Befehlszeilenoptionen unterstützen. Zum Beispiel:Um eine Hilfemeldung anzuzeigen, können Sie entweder die Option „-h“ oder „–help“ verwenden. Eine typische Konvention ist, dass langen Optionen ein doppelter Hash und kleinen Optionen ein einfacher Bindestrich vorangestellt wird. Unten ist der Code:
while getopts ":h:u:p:" OPTION do case "$OPTION" in h) usage ;; u) USERNAME=${OPTARG} ;; p) PASSWORD=${OPTARG} ;; \?) usage ;; esac done
Der Befehl getopts ist ein in die Korn/POSIX-Shell integrierter Befehl, der Optionen und Optionsargumente aus einer Liste von Parametern abruft. Lesen Sie hier mehr über Getopts. Einfach für jede Befehlszeilenoption wird die Schleife ausgeführt und der entsprechende Wert für jede Option wird in zugewiesenen Variablen gespeichert. Unten ist das Code-Snippet, um zu prüfen, ob die übergebenen Parameter leer sind:
shift $((OPTIND-1)) if [ -z "${USERNAME}" ] || [ -z "${PASSWORD}" ]; then usage fi
4. So führen Sie Linux-Befehle über ein Shell-Skript aus
Hier useradd ist ein Linux-Befehl zum Erstellen eines Kontos.
/usr/sbin/useradd -m ${USERNAME}
Hier müssen Sie beachten, dass Sie, wenn der Benutzer bereits vorhanden ist, möglicherweise einige Warnungen als stderr erhalten, die im folgenden Bild gezeigt werden:
5. Wie man stdout und stderr in die Protokolldatei ignoriert/umleitet
Bash und andere moderne Shells bieten eine E/A-Umleitungsfunktion. Linux-Standard-I/O-Stream-Nummern lauten wie folgt:
Handle | Name | Beschreibung |
0 | stdin | Standardeingabe |
1 | stdout | Standardausgabe |
2 | stderr | Standardfehler |
a. Stderr-Stream in eine Datei umleiten :
$script 2> error.log
b. Stdout-Stream in eine Datei umleiten :
$script 1> output.log
c. Leiten Sie sowohl stderr als auch stdout in eine Datei um:
$script &>file.out
Wenn Sie diese stderr- und stdout-Meldungen einfach ignorieren möchten, leiten Sie sie nach /dev/null anstatt nach file.
um$script 2>/dev/null
6. So überprüfen Sie die erfolgreiche Ausführung des Befehls in einem Shell-Skript
$? ist der Rückkehrcode (Statuscode) des zuletzt ausgeführten Befehls oder Skripts. 0 ==Erfolg, jede andere Zahl bedeutet einen Fehlschlag
7. Bedingte Anweisungen wie if/else im Shell-Skript
Die meisten Programmier- und Skriptsprachen haben eine Art if/else-Ausdruck, ebenso das Shell-Skripting. Die folgende Tabelle zeigt die verschiedenen zulässigen Ausdrücke.
-eq | gleich |
-ne | nicht gleich |
-lt | weniger als |
-le | kleiner oder gleich |
-gt | größer als |
-ge | größer als oder gleich |
Hinweis:Im Gegensatz zu den meisten anderen Sprachen sind Leerzeichen sehr wichtig, wenn ein if verwendet wird Anweisung im Shell-Scripting.
Der folgende Code prüft den Statuscode des letzten Befehls und bewegt sich bei Erfolg weiter, um ein Passwort zu erstellen. Nach erfolgreicher Passworteinstellung werden wir eine Nachricht auf dem Terminal für den erfolgreichen Abschluss der Aktivität ausgeben.
# Create User Account /usr/sbin/useradd -m ${USERNAME} 2>/dev/null if [ $? -eq "0" ]; then echo -e ${PASSWORD} | /usr/bin/passwd ${USERNAME} --stdin >/dev/null if [ $? -eq "0" ]; then echo "User ${USERNAME} created sucessfully" fi fi
Vollständiges Skript:Download-Link
Schauen Sie sich unsere anderen interessanten Artikel über LINUX an: