GNU/Linux >> LINUX-Kenntnisse >  >> Linux

[Linux] :7 Dinge, die Sie lernen werden, wenn Sie anfangen, ein einfaches Shell-Skript zu schreiben

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:

Bash-Shell-Schnelltastenkombinationen – Linux-Tipps

8 lustige Linux-Befehle – Sie werden es lieben!

Best Practices beim Ausführen des Befehls rm -rf unter Linux

Linux Systemadministratorbefehle

Wie füge ich einen Fortschrittsbalken zum Kopieren und Verschieben von Befehlen in Linux hinzu?

So synchronisieren Sie die Zeit des Linux-Servers mit dem Network Time Server

So konfigurieren Sie yum für die Verwendung des CentOS-Repositorys auf einem RHEL-Computer

Beste Tools zur Datenwiederherstellung [Windows, Linux, DOS, MAC OS X]


Linux
  1. Wie führen Sie ein Skript beim Anmelden in * nix aus?

  2. Shell-Skript parallel ausführen

  3. Aktuelles Verzeichnis des Shell-Skripts?

  4. Kann eine .sh-Datei Malware sein?

  5. Systemd-postgresql-Startskript

Shell im Script zur Laufzeit ermitteln?

Bestimmen des Pfads zum bezogenen Shell-Skript?

Wie führe ich einen Befehl in einem Shell-Skript aus?

Warum müssen Sie #!/bin/bash an den Anfang einer Skriptdatei setzen?

Transliterationsskript für die Linux-Shell

Wie kann ich den Distributionsnamen und die Versionsnummer in einem einfachen Shell-Skript erhalten?