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
Du bist ein Profi !!! *oder*
Nein für nichts 😀
Wenn es Ihnen gedient hat und es interessant ist, bin ich zufrieden 😉
Grüße Freund
@ 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 😉
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 🙁
@ 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.
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.
du hast recht, man lernt hier mehrere dinge.
Grüße und schöne Ferien !! 😀
Großartig und exzellent erklärt +1, die Zeit, die Sie dafür gebraucht haben ...
aber ich bin die Mühe wert 😉
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 😉
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 😉
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 😀
dank
🙂
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.
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
denn beim vergleich mit dem wenn du das fragezeichen verwendest? Welchen Unterschied gibt es zwischen dem Setzen der? jeder andere Brief
$? bedeutet 'die vorherige Ausgabe oder Ausgabe', dh für den Fall, dass das Ergebnis des vorherigen Befehls ... 🙂
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).
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?
Sehr interessant, danke!
Danke für den Beitrag, ich habe eine Stunde gebraucht, um es xD zu verstehen, aber ich habe es verstanden !!!!.
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
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.
Hervorragende Erklärung, Grüße
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
Entschuldigung, ich habe gesehen, dass es nicht gesendet wurde und es sich verdoppelt hat