Nützliche Shell-Skripte in jedem Programm

Bash Es ist ein Computerprogramm, dessen Aufgabe es ist, Befehle zu interpretieren. Es basiert auf der Shell von Unix und wurde für das Projekt geschrieben GNU Dies ist die Standard-Shell in den meisten Distributionen von GNU / Linux. Sein Name ist eine Abkürzung für Bourne-Again-Shell (eine andere Shell Bourne)ein Wortspiel machen (Wiedergeboren bedeutet Wiedergeburt) auf Bourne Shell (sh), der einer der ersten großen Interpreten von Unix war.

Heute werden wir einige Shell-Skripte zeigen, die für Entwickler sehr nützlich sein können. Die meisten arbeiten in jeder Shell Unix, obwohl einige verlangen, dass sie speziell von ausgeführt werden Bash.

Verhindern Sie, dass nicht privilegierte Benutzer das Skript ausführen

Einige Skripte führen administrative Aufgaben aus, sodass möglicherweise nur der Root-Benutzer das Skript ausführen soll. In diesem Fall können wir so etwas verwenden:

#!/bin/bash
if [[ $EUID -ne 0 ]]; then
echo "Este script debe ser ejecutado por el usuario root" 1>&2
exit 1
fi

Erlauben Sie die Skriptausführung nur einem bestimmten Benutzer

Ähnlich wie im obigen Code möchten wir möglicherweise, dass nur ein bestimmter Benutzer das Skript ausführt. Wir machen es so:

#!/bin/bash
AUTHORIZED_USER="usuario_permitido"
if [ $USER != $AUTHORIZED_USER ]; then
echo "Este script debe ser ejecutado por el usuario $AUTHORIZED_USER" 1>&2
exit 1
fi

Stellen Sie sicher, dass ein Dienst / Prozess ausgeführt wird

Wenn wir wissen möchten, ob Prozesse eines Dienstes oder Programms ausgeführt werden, können wir dieses Skript verwenden (In diesem Fall wird überprüft, ob der Dämon von Apache läuft):

#!/bin/sh
SERVICE='httpd'
if ps ax | grep -v grep | grep $SERVICE > /dev/null
then
echo "El servicio $SERVICE esta ejecutandose"
else
echo "Chanfle! El servicio $SERVICE esta detenido"
fi

Erstellen Sie eine Sperrdatei

Manchmal müssen wir sicherstellen, dass das Skript nicht zwei- oder mehrmals gleichzeitig ausgeführt wird. Hierfür können wir die Sperrdateien verwenden. Dies ist eine einfache Version eines Skripts, mit der wir Folgendes tun können:

#!/bin/bash
lockfile=/var/lock/loquesea.lock
if [ ! -e $lockfile ]; then
touch $lockfile
echo "hago muchas cosas importantes aqui"
rm $lockfile
else
echo "ya hay otro proceso corriendo"
fi

In diesem Fall wird überprüft, ob die Datei was auch immer existieren. Falls vorhanden, führt das Skript seine Aufgaben NICHT aus. Wenn es nicht vorhanden ist, erstellt es die Datei, führt die zum Ausführen erforderlichen Aufgaben aus und entfernt sie. Dies ist jedoch nicht ganz zuverlässig. Was würde passieren, wenn unser Skript während der Ausführung abrupt geschlossen wird?

In diesem Fall würde die Sperrdatei nicht gelöscht und wir könnten das Skript daher nicht erneut ausführen. Um diese Fälle abzudecken, können wir den Befehl trap verwenden, mit dem wir Befehle ausführen können, falls unser Skript unerwartet endet. Dies ist eine erweiterte Version, die auch die PID des Skripts speichert, das sie ausführt, in der Sperrdatei:

#!/bin/bash
lockfile=/var/lock/loquesea.lock
if ( set -o noclobber; echo "$$" > "$lockfile") 2> /dev/null;
then
trap 'rm -f "$lockfile"; exit $?' INT TERM EXIT
echo "hago muchas cosas aqui tranquilamente"
rm -f "$lockfile"
trap - INT TERM EXIT
else
echo "Ya hay otro proceso de este script ejecutandose"
echo "corriendo con el PID: $(cat $lockfile)"
fi

Lassen Sie uns den Befehl etwas besser verstehen Falle. Die Syntax lautet im Wesentlichen wie folgt: Trap-Befehlssignal [Signal…]; Dabei ist das Signal das Abschlusssignal, das Sie abfangen möchten. Wenn Sie eine Liste der verfügbaren Signale anzeigen möchten, können Sie den Befehl kill -l ausführen. Für den vorherigen Fall wurden die INT-Signale verwendet (erfasst die durch Strg + c erzeugte Terminierung), BEGRIFF (Beendigung durch Kill-Befehl) und EXIT (normale Beendigung eines Skripts, entweder weil keine Zeilen mehr ausgeführt werden müssen oder weil es auf den Befehl exit stößt).

Optionsmenü

Um ein Menü zu erstellen, in dem der Benutzer eine Reihe von Optionen auswählen kann, können Sie das folgende Schema verwenden:

#!/bin/bash
clear
while :
do
echo " Escoja una opcion "
echo "1. quien soy?"
echo "2. cuanto espacio tengo"
echo "3. que es esto?"
echo "4. Salir"
echo -n "Seleccione una opcion [1 - 4]"
read opcion
case $opcion in
1) echo "este eres:";
whoami;;
2) echo "tienes esto";
df;;
3) uname -r;;
4) echo "chao";
exit 1;;
*) echo "$opc es una opcion invalida. Es tan dificil?";
echo "Presiona una tecla para continuar...";
read foo;;
esac
done

Bitten Sie um Bestätigung, bevor Sie ein Skript ausführen

Manchmal ist es nützlich, wenn der Benutzer die Ausführung einer Reihe von Anweisungen bestätigt, dh die typische Nachricht, in der der Benutzer aufgefordert wird, Ja oder Nein einzugeben. Wir können das so machen:

#!/bin/bash
while true; do
echo
read -p "esta seguro de hacer lo que sea que vaya a hacer " yn
case $yn in
yes ) break;;
no ) exit;;
* ) echo "por favor responda yes o no";;
esac
done
echo "si se ejecuta esto es que aceptaste"

Ende des Artikels. Einfach toll 😀

Editorial: Sie müssen vorsichtig mit Leerzeichen und Tabulatoren sein, die aus irgendeinem Grund nicht herauskommen


Hinterlasse einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert mit *

*

*

  1. Verantwortlich für die Daten: Miguel Ángel Gatón
  2. Zweck der Daten: Kontrolle von SPAM, Kommentarverwaltung.
  3. Legitimation: Ihre Zustimmung
  4. Übermittlung der Daten: Die Daten werden nur durch gesetzliche Verpflichtung an Dritte weitergegeben.
  5. Datenspeicherung: Von Occentus Networks (EU) gehostete Datenbank
  6. Rechte: Sie können Ihre Informationen jederzeit einschränken, wiederherstellen und löschen.

  1.   KZKG ^ Gaara sagte

    Scheiße, sie sind großartig, O_O ... es wird meinen kleinen Dingen, die ich in Bash mache, sehr helfen

  2.   ren434 sagte

    Die Skripte sind super! Was für ein großartiger Beitrag im Ernst, genau das, wonach ich gesucht habe.

    PS: Das Forum ist ausgefallen.

    1.    KZKG ^ Gaara sagte

      Ja, der Server, auf dem das Forum bereitgestellt wird, ist offline, keine Ahnung warum ... Wir haben eine E-Mail an den Freund geschrieben, der sich darum kümmert, um zu sehen, was er auf uns reagiert

      Grüße.

  3.   ren434 sagte

    Na ja, hoffen wir, dass es nichts Ernstes ist.

  4.   lefty sagte

    War diese "Spreu" auch in Code Ninja enthalten? XD

  5.   Taregon sagte

    Ich mag die Kraft von bash 😉 und sie sagten mir, wofür die C-Sprache ist ... nun, in Shell-Skripten gibt es viele bekannte Befehle.

  6.   Friedrich sagte

    Danke, es hat mir sehr gut gefallen

  7.   Engelsklinge sagte

    Die Validierung von Eingabeparametern ist sehr nützlich. Ich wusste nicht, wie ich die Menüs machen sollte =)

  8.   Hyuuga_neji sagte

    Großartig…. Jetzt kann ich meinen Skript-Churros etwas "Härte" geben lol

  9.   Rabe sagte

    Es ist eine große Freude zu sehen, wie unsere bescheidene Arbeit bei CodeNinja der internationalen Linux-Community dient

    1.    KZKG ^ Gaara sagte

      Klar! 🙂
      Alles ist zu helfen und gemeinsam beizutragen und keine Flammen zu erzeugen, oder? 😉

  10.   Diego sagte

    Das ausgeführte Prozessskript könnte ein wenig verbessert werden, indem Sie die Option auswählen, den Prozess auszuwählen, über den Sie wissen möchten. Es würde ungefähr so ​​aussehen:

    #! / Bin / bash
    Echo "Wählen Sie einen Dienst"
    SERVICE lesen
    # SERVICE = 'mysql'
    wenn ps ax | grep -v grep | grep $ SERVICE> / dev / null
    dann
    echo "$ SERVICE Dienst läuft"
    sonst
    echo "$ SERVICE-Dienst wird gestoppt"

  11.   Jua Carlos C. sagte

    Ich bin sehr praktisch mit Ihren Skripten, aber ich suche nach einem speziellen Skript, um ein Problem zu lösen, das ich habe: Wir haben einen Anwendungsserver im Unternehmen, auf den interne Benutzer über Telnet zugreifen und eine spezielle Anwendung ausführen Das ist begrenzt. Für Lizenzen missbrauchen und öffnen Benutzer mehr als ein Telnet, um zwei oder mehr Lizenzen zu übernehmen. Ich habe daher das Skript verwendet, mit einer Methode zu überprüfen, welcher Telnet-Prozess länger als 2 Stunden inaktiv ist, und daher einen Kill zu senden Könntest du mir helfen?

    1.    Diego sagte

      Installieren Sie das folgende Programm

      aptitude autolog installieren

      Und Sie haben die Konfigurationsdatei in /etc/autolog.conf

  12.   Tito sagte

    Großartig, Freund, ich kann Ihnen eine Frage stellen, ich brauche ein Shell-Skript mit Optionen und ich habe es auf Ihrem basiert und es funktioniert großartig, aber eine der Optionen muss E-Mails senden (mit Postifix), es fragt nach Betreff, Text und Empfänger auf dem Bildschirm und was senden und überprüfen, ob es richtig gesendet wird, mit der Mailq kann ich die Warteschlange sehen und sehen, ob es gesendet wurde, aber wie sende ich die E-Mails per Befehl unter Verwendung der Variablen, die Betreff, Text und Empfänger empfangen haben ? 🙁

    1.    KZKG ^ Gaara sagte

      Schreiben Sie an meine E-Mail (kzkggaara[at])desdelinux[dot]net) um ruhiger zu sprechen, ich helfe dir gerne :)

      1.    Tito sagte

        Vielen Dank Freund, du hast bestanden!

  13.   Fer sagte

    Hallo gut.
    Ich bin auf diese hervorragenden Beispiele gestoßen, als ich gerade ein Menü brauchte.
    Ich habe es geschafft und kann es nicht zum Laufen bringen (in den vorherigen Schritten).
    Ich habe 247 Elemente, die sich auf die verschiedenen territorialen Bereiche beziehen.
    Was ich brauche, ist ein Menü, aus dem ich das Land auswählen kann:
    #! / Bin / bash
    klar
    während:
    do
    echo »Wählen Sie das Land aus, in dem Sie es versuchen möchten»
    Echo «1. Afghanistan (AF) »
    Echo «2. Albanien (AL) »
    Echo «3. Deutschland (DE) »
    Echo «5. Angola (AO) »
    Echo «6. Anguilla (AI) »
    .. und geht weiter bis 247

    echo -n "Option auswählen [1 - 247]"
    Leseoption
    case $ option in
    1) echo "das bist du:"; whoami ;;
    2) echo "du hast das"; df ;;
    3) Echo ""; uname -r ;;
    4) Echo "Tschüss"; Ausgang 1 ;;
    5) echo "das bist du:"; whoami ;;
    6) echo "das bist du:"; whoami ;;
    … Und weiter bis 247
    *) echo «$ opc ist eine ungültige Option. Es ist so schwierig?";
    echo "Drücken Sie eine Taste, um fortzufahren ...";
    lies foo ;;
    esac
    erledigt

    Das Verhalten ist wie folgt:
    Jede Option außer 4, bei der es sich um die Ausgabe handelt, löscht die eingegebene Nummer und wartet auf eine neue Nummer.
    Eingabe 4 kommt heraus.
    Wenn ich den Code 4 in eine andere Zeile setze (sagen wir 150), wird er ohne Probleme gleichermaßen ausgegeben.
    Ich habe auch versucht, den Code in dieses Format zu bringen:
    151) echo "das bist du:";
    Wer bin ich ;;
    mit dem gleichen Ergebnis.
    Ich frage mich, ob es bessere Optionen für ein so langes Menü gibt und natürlich mache ich auch etwas falsch.
    Eine Hilfe wäre sehr dankbar, danke

  14.   Nur Raul sagte

    ausgezeichnet ... Ich finde es sehr gut, in die Muschel zu kommen

    dank

  15.   Wahrzeichen sagte

    großartig, hey, wie kann ich meine Bash mit einer Datei zum Laufen bringen?
    Beispiel:

    upload.sh fotodelavecina.jpg

    Ich denke, dass mein Bash-Skript "upload.sh" die Zugriffsinformationen zu meinem FTP hat

    Grüße und danke 😀

  16.   netzulo ntx sagte

    Guter Mann, vielen Dank für all die Skripte. Ich habe einen CentOS-Server eingerichtet und Sie wissen nicht, wie gut diese Vorlagen zu mir kommen. Bitte kontaktieren Sie mich per E-Mail. Ich möchte Ihnen etwas vorschlagen

  17.   Gabriel Balderramos sagte

    Warum verwenden Sie read foo, wenn Sie ein Menü erstellen? schnelle Antworten, die ich brauche