Bash: Bedingungen (wenn-dann-sonst)

Hallo

Dieses Mal werde ich Ihnen zeigen, wie Sie ein Skript mit Bedingung in erstellen Bash, was übersetzt ist:

Wenn die gewünschte X-Aktion ausgeführt wird, wird die Y-Aktion ausgeführt. Wenn sie nicht ausgeführt wird, wird eine weitere Aktion ausgeführt.

Einfache Erklärung nein 😀

Nun habe ich ein paar Minuten über ein Beispiel nachgedacht, das in diesem Tutorial verwendet werden soll. Das folgende Dilemma / Problem / Situation ist mir eingefallen:

Wir befinden uns im Netzwerk unseres Unternehmens und möchten wissen, ob der X-Computer mit dem Netzwerk verbunden ist. Dafür machen wir eine Skript was wird er tun Klingeln in Richtung dieses Computers, und wenn es sich in einem Netzwerk befindet (dh wenn es das zurückgibt Klingeln) wird uns sagen, dass JA, es ist im Netzwerk, andernfalls (das heißt, es ist nicht im Netzwerk) wird es uns sagen, dass es NICHT im Netzwerk ist.

Sobald dies erledigt ist, werde ich nun erklären, wie man mit Bedingungen 🙂 fährt

Hier ist der Code:

ping -c 1 DIRECCION-IP
if [ $? -ne 0 ]; then
echo "No está en red"
else
echo "Sí está en red"
fi

Mach dir keine Sorgen, ich werde dir das im Detail erklären 😉

Klingeln ist der Befehl, den wir verwenden werden, und er sagt uns, ob sich dieser PC im Netzwerk befindet. Um Ihnen mitzuteilen, welchen PC wir überprüfen möchten, ob er sich im Netzwerk befindet oder nicht, müssen wir ihn ändern IP ADRESSE Anhand der IP-Adresse des PCs möchten wir natürlich überprüfen.

Wie Sie sehen können, habe ich «-c 1«, Was für uns notwendig ist. Wenn wir einen Computer anpingen, stoppt diese Aktion nicht (der Ping), bis wir uns selbst drücken [Strg] + [C], also setzen «-c 1»Wir fordern es auf, nur eine Überprüfung durchzuführen (nur einen Ping-Versuch) und keinen anderen. Dadurch wird es sofort gestoppt, dh es wird nur einmal überprüft, ob sich der Computer im Netzwerk befindet.

Wenn Sie Zweifel haben, keine Schmerzen ... sagen sie es und ich werde es Ihnen gerne noch einmal erklären 😉

Jetzt kommt der Zyklus, denn was ich gerade erklärt habe, ist nichts weiter als ein normaler Befehl / eine normale Aktion 😀

if [ $? -ne 0 ]; then
echo "No está en red"
else
echo "Sí está en red"
fi

Damit Sie das verstehen, werde ich ein äußerst wichtiges Detail von Bash erklären

Das sachkundigste Thema könnte mich als falsch oder so bezeichnen, aber hey, ich schreibe dies für Anfänger oder weniger Experten, solange sie es verstehen, dann großartig genial

Es passiert so wie in Bash es ist so etwas wie 0 y 1Das heißt, entweder Sie leben oder Sie sind tot, wenn ein Befehl oder eine Aktion ausgeführt wird: Entweder gut ausgeführt Kein Problem (1), Oder da war etwas Problem oder Fehler (0).

Wir führen eine X-Aktion oder einen X-Befehl aus, und was wir getan haben, wurde möglicherweise gut oder schlecht ausgeführt, es kann ein Fehler aufgetreten sein oder nicht, und hier ist das Detail 😉

Wenn was wir senden zu tun (in diesem Fall: ping -c 1 IP-ADRESSE) hat keinen Fehler gemacht und war erfolgreich, daher wird der Wert zurückgegeben: 1 . Andernfalls und wenn die Aktion (dh der Ping) nicht erfolgreich war, wird der Wert zurückgegeben 0.

 Und schließlich bedeutet der obige Code Folgendes:

Wenn der Wert 0 zurückgegeben wurde, dann

Zeigen Sie den Text an: «Nicht im Netzwerk»

Andernfalls (und NICHT 0, sondern 1 wird zurückgegeben)

Zeigen Sie den Text an: «Wenn es im Netzwerk ist«

Dies, was ich Ihnen gerade erklärt habe, wird uns in Zukunft für viele Dinge dienen, denn es ist wirklich nützlich zu sagen, dass wenn die X-Aktion einen Fehler verursacht hat, die Y-Aktion ausgeführt wird und falls die X-Aktion keinen Fehler gegeben hat, die Z-Aktion ausgeführt wird.

Ich weiß, dass einige etwas verwirrt sein könnten, deshalb habe ich versucht, es auf verschiedene Arten zu erklären, damit jeder es auf die eine oder andere Weise versteht. Falls jemand Zweifel hat, lassen Sie es mich wissen.

Nun machen wir unser Skript 😀

Wir müssen die Schritte in diesem Tutorial befolgen: Bash: So erstellen Sie ein ausführbares Skript

Dann kopieren wir den folgenden Code in diese Datei (script.sh), und am Ende sagen wir «wunsch"(Ohne die Anführungszeichen):

ping -c 1 DIRECCION-IP
if [ $? -ne 0 ]; then
echo "No está en red"
else
echo "Sí está en red"
fi

Es sollte so aussehen (denken Sie daran, dass Sie die IP-ADRESSE in die gewünschte IP geändert haben müssen):

Hier sehen Sie das laufende Skript:

% CODE1%

Wie Sie sehen können, sagt er uns am Ende «Ja, es ist im Netzwerk»🙂

Das Wichtigste dabei ist, dass Sie dies tatsächlich über die Bedingungen verstehen. Ich überlasse Ihnen einen anderen Code, um es noch einmal zu erklären, aber aus einem anderen Blickwinkel.

read "texto"
if [ "$texto" = "3" ]; then
echo "Correcto"
else
echo "Incorrecto"
fi

Was dies bedeutet ist einfach, ich lasse die Erklärung Zeile für Zeile:

1. Zeile: Was wir schreiben, das ist der Wert der Variablen «Text"(Ohne die Anführungszeichen).

2. Zeile: Überprüfen Sie, ob der Inhalt der Variablen (was wir gerade geschrieben haben) ist 3.

3. Zeile: Im Falle des Seins 3, es wird uns den Text zeigen «Korrigieren"(Ohne die Anführungszeichen).

4. Zeile: Ansonsten (dh falls wir nicht 3 geschrieben haben).

5. Zeile: Es wird uns den Text zeigen «Falsch"(Ohne die Anführungszeichen).

6. Zeile: Ende des Zustands.

Wie sie erkennen konnten, wenn wir sagen Echo und dann zwischen doppelten Anführungszeichen («) ein Text, dies bewirkt, dass dieser Text im Terminal angezeigt wird. Das heißt, wenn wir sagen:

echo "esto es una prueba"

Es zeigt uns den Text im Terminal: Das ist ein Test

Aber zurück zu diesem zweiten Beispiel, ich werde Ihnen die Nützlichkeit (und Ausführung) dieses zweiten Skripts mit etwas SEHR Einfachem zeigen - dem typischen «Wie viel ist 1 + 2?«

Ich überlasse Ihnen den Code des vollständigen Skripts:

#!/bin/bash
# -*- ENCODING: UTF-8 -*-
echo "¿Cuánto es 1 + 2?"
read "texto"
if [ "$texto" = "3" ]; then
echo "Correcto"
else
echo "Incorrecto"
fi
exit

So funktioniert das Skript:

% CODE2%

Und nun ... nichts mehr hinzuzufügen.

Dies ist etwas Elementares, einfaches Ja, aber ich habe trotzdem versucht, es so gut wie möglich zu erklären, weil nicht jeder die Seele eines Programmierers hat und wir oft Skripte wie diese (oder ähnliche) erstellen müssen. Auf jeden Fall hoffe ich, dass dieser Artikel für Sie nützlich sein wird jemand 🙂

Bei Zweifeln oder Fragen, Beschwerden oder Vorschlägen bitte hier lassen, ich werde Ihnen gerne antworten und so lernen wir alle ein bisschen mehr 😀

Grüße


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.   jhals sagte

    Du bist ein Profi !!! *oder*

    1.    KZKG ^ Gaara sagte

      Nein für nichts 😀
      Wenn es Ihnen gedient hat und es interessant ist, bin ich zufrieden 😉

      Grüße Freund

  2.   ordnungsgemäße sagte

    @ KZKG ^ Gaara,
    Apropos Bash-Programmierung Ich habe eine Frage:
    Was ist der Unterschied zwischen der Deklaration einer Variablen wie dieser VAR = Hallo und der Deklaration wie folgt VAR = $ {VAR: -hello}?

    Ich erkläre:
    http://pastebin.com/a3cfWXeD

    Grüße 😉

    1.    KZKG ^ Gaara sagte

      Hallo
      Nun, ich bin überhaupt kein Experte für Bash ... eigentlich habe ich keine Ahnung, LOL !!
      Wenn ich die Variablen deklariere, ist es so:
      : ${OPTFOLDER:="/opt/"}

      Aber weil ich es immer so gemacht habe, weiß ich nicht, was der Unterschied ehrlich sein könnte 🙁

  3.   ordnungsgemäße sagte

    @ KZKG ^ Gaara
    Nun, ich habe die Frage gestellt, weil die Wahrheit ist, dass ich es auch nicht wusste, ich schreibe normalerweise SlackBuilds und die Wahrheit ist, dass Variablen, die wie in VAR1 deklariert sind, in diesen Skripten im Überfluss vorhanden sind. Eine schnelle Google-Suche hat mir geholfen, diese Frage zu klären. Ich teile sie mit allen, damit wir alle lernen können:

    Skript:
    http://pastebin.com/faAQb35w

    Erläuterung:
    Das Deklarieren von Variablen der Form VAR = $ {VAR: -default_value} bedeutet, dass die Variable VAR genau dann den Wert default_value annimmt, wenn der Wert null ist oder nicht existiert.

    Praktisches Beispiel:
    Bei der Ausführung des Skripts wird aufgefordert, einen Wert einzugeben, der in der VAR-Variablen gespeichert werden soll. Wenn etwas eingegeben wird, wird angezeigt, was eingegeben wurde. Wenn wir nichts eingeben und die Eingabetaste drücken, deklarieren wir die Variable VAR als null, daher wird value_default angezeigt.

    Grüße.

    1.    KZKG ^ Gaara sagte

      HAHA Das wusste ich nicht 😀
      Ok, vielen Dank Freund ... das habe ich am Ende des Artikels gemeint, ich habe nicht vor, etwas zu unterrichten und das war's, ich weiß, dass ich hier immer etwas Neues lernen werde 😀

      Grüße und nochmals vielen Dank.

      1.    ordnungsgemäße sagte

        du hast recht, man lernt hier mehrere dinge.

        Grüße und schöne Ferien !! 😀

  4.   Lukas Mathias sagte

    Großartig und exzellent erklärt +1, die Zeit, die Sie dafür gebraucht haben ...
    aber ich bin die Mühe wert 😉

    1.    KZKG ^ Gaara sagte

      Ich habe tatsächlich 80% in nur einem Tag geschrieben. Ich habe so lange gebraucht, um es zu veröffentlichen, nur weil mein Internet es mir nicht erlaubt hat.
      Vielen Dank für Ihren Kommentar 😉

  5.   Hugo sagte

    Eine andere Möglichkeit ist die Verwendung von DNS, da in Netzwerken manchmal das ICMP-Protokoll blockiert ist:

    (Host -ta IP-ADRESSE> / dev / null 2> & 1) && echo "Mit Netzwerk verbunden"

    Sie werden auch feststellen, dass in diesem Beispiel die Rückgabewertprüfung implizit ist 😉

    1.    KZKG ^ Gaara sagte

      Sie wie immer Freund, mit Tipps, die ich nicht ganz kenne HAHAHA.
      Danke, der Kommentar wird geschätzt und hehe ... eine weitere neue Sache, die ich lerne 😀

  6.   Datum sagte

    dank

    🙂

  7.   Leper_Ivan sagte

    Obwohl seit der Veröffentlichung dieses Themas einige Tage vergangen sind, hat es mir sehr geholfen, jetzt, wo ich ein Skript in Bash erstellt habe. Danke Gaara.

  8.   Edgar navarro sagte

    Doc. Danke für die Hilfe, die Sie mir klar gemacht haben.

    Nur eine Abfrage, wie mache ich das, wenn ein Computer nicht mehr automatisch pingt, ändert der andere die IP. Ich habe das.

    um die IP zu ändern
    #! / Bin / bash
    ping -c 10 192.168.1.50 # wenn es nicht automatisch pingt
    ifconfig eth0 192.168.1.50 Netzmaske 255.255.255.0 Broadcast 192.168.1.0
    ifconfig eth0 down
    ifconfig eth0 up

  9.   Abraham sagte

    denn beim vergleich mit dem wenn du das fragezeichen verwendest? Welchen Unterschied gibt es zwischen dem Setzen der? jeder andere Brief

    1.    KZKG ^ Gaara sagte

      $? bedeutet 'die vorherige Ausgabe oder Ausgabe', dh für den Fall, dass das Ergebnis des vorherigen Befehls ... 🙂

      1.    Andrew sagte

        Es gibt eine andere Möglichkeit, dasselbe Ergebnis zu erzielen, indem Sie den Befehl ping direkt als Argument an if übergeben:

        wenn ping -c 1 IP-ADRESSE; dann
        Echo "Ja, es ist im Netz"
        sonst
        Echo "Nicht im Netzwerk"
        fi

        Wenn der Rückgabewert des Befehls, den Sie als Argument übergeben, ausgewertet wird und 0 zurückgibt, ist alles wahr, alles andere ist falsch. Die eckigen Klammern entsprechen dem Testbefehl. Sie können jedoch jeden Befehl als Argument übergeben (solange der Befehl einen Wert zurückgibt).

  10.   Grüße sagte

    Hallo, wie führe ich eine script.sh mit einem Benutzer X in dem Skript aus, in dem ich einen Benutzer Y erstelle, und dieser Benutzer Y führt die script.sh weiter aus

    Kann das gemacht werden?

  11.   kuktos sagte

    Sehr interessant, danke!

  12.   Francisco cisco~~POS=HEADCOMP sagte

    Danke für den Beitrag, ich habe eine Stunde gebraucht, um es xD zu verstehen, aber ich habe es verstanden !!!!.

  13.   Eloy sagte

    Das Skript ist in Ordnung. Arithmetisch könnte es auch als ($? == 0) ausgeführt werden, wenn es gleich Null ist, befindet es sich nicht im Netzwerk, andernfalls befindet es sich im Netzwerk. Und wenn wir es noch ein bisschen interaktiver machen wollen, können wir sagen:
    echo -n Geben Sie die IP ein:
    IP lesen
    ping -c 1 $ ip

  14.   Dario sagte

    Hallo, ich bin sehr neu in diesem Bereich. Ich versuche, eine Ticketnummer (alphanumerisch) durch Lesen zu erstellen. Wenn die Eingabe das richtige Format (ABC-123456) hat, muss ein Befehl "x" ausgeführt werden und ich weiß nicht wie es geht, könntest du mir helfen?

    Echo "Ticket eingeben"
    -p Ticket lesen

    if $ ticket = "keine Ahnung (Format ABC-123456"); dann cp file.txt $ ticket; sonst echo "falsches Format, versuche es erneut"; read -p; fi.

    Sicher ist es schrecklich und sie lachen haha, aber wie ich schon sagte, ich fange gerade damit an.

    Wenn ich es schlecht erkläre, sag es mir bitte und ich versuche es besser zu machen.

    Umarme alle.

  15.   Humberto Y. sagte

    Hervorragende Erklärung, Grüße

  16.   Agil sagte

    Ich habe ein wenig Zweifel bei if, else und anderen.
    Ich möchte, dass ein Skript überprüft, ob eine Datei (eines der Protokolle) vorhanden ist, und wenn nicht, es erstellt und später darauf schreibt. Aber wenn es existiert, möchte ich, dass Sie es einfach anschreiben.

    Was ich habe ist:

    Datum = `Datum -R`
    #Ich habe das variable Datum getestet, das zwischen dem Anfang eines nicht aktualisiert wird
    #Prozess und endet, manchmal kann eine Stunde vergehen und die richtige Uhrzeit wird nicht angezeigt.

    if [-f /home/user/logs/test.log];
    dann
    Berühren Sie /home/usuario/logs/test.log
    sonst
    echo "$ Datum: Aktualisiert" >> /home/user/logs/test.log
    echo «———————————————-» >> /home/user/logs/test.log
    fi

    Theoretisch sollte es in Ordnung sein, aber die Realität ist, dass es nicht aktualisiert wird, wenn die referenzierte Datei bereits vorhanden ist

    1.    Agil sagte

      Entschuldigung, ich habe gesehen, dass es nicht gesendet wurde und es sich verdoppelt hat