Bash: Konditiounen (wann-dann-anescht)

Moien 😀

Dës Kéier wäert ech Iech weisen, wéi een e Skript mat Zoustand maacht Bash, wat iwwersat ass:

Wann d'X Saach déi Dir wëllt fäerdeg ass, Y Handlung gemaach ass, wann et net fäerdeg ass da gëtt eng aner Aktioun gemaach.

Einfach Erklärung nee 😀

Elo hunn ech fir e puer Minutten e Beispill geduecht fir an dësem Tutorial ze benotzen, de folgenden Dilemma / Problem / Situatioun ass mir geschitt:

Mir sinn am Netzwierk vun eiser Firma, a mir wëlle wëssen ob X Computer mam Netz ass. Fir dëst maache mir e Schrëft wat wäert hie maachen Ping Richtung dëse Computer, a wann et an engem Netzwierk ass (dat ass, wann et de Ping) wäert eis soen datt JO, et ass am Netz, soss (dat heescht, et ass net am Netz) wäert et eis soen datt et NET am Netz ass.

Wann dëst fäerdeg ass, wäert ech elo erkläre wéi een mat de Konditiounen zyklus 🙂

Hei ass de Code:

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

Maacht Iech keng Suergen, ech erklären Iech dat am Detail 😉

Ping ass de Kommando dee mir benotze wäerten, an et wäert eis soen ob dee PC um Netz ass. Fir Iech ze soen wéi ee PC mir wëlle kontrolléieren ob en am Netz ass oder net, musse mir änneren IP ADRESS duerch offensichtlech d'IP Adress vum PC wëlle mir kontrolléieren.

Wéi Dir gesitt, hunn ech gesat «-c 1 an«, Wat fir eis noutwendeg ass. Wa mir e Computer pingelen, hält dës Aktioun net op (de Ping) bis mir eis selwer drécken [Ctrl] + [C], sou setzen "-c 1 an»Mir soen Iech nëmmen eng Verifikatioun ze maachen (nëmmen ee Ping Versuch) a keng aner, dëst wäert et direkt maachen stoppen, dat ass ... et kontrolléiert ob de Computer nëmmen eemol am Netz ass.

Wann Dir Zweifel doriwwer hutt, keng Péng ... se soen dat an ech wäert se frou si nach eng Kéier z'erklären 😉

Elo kënnt den Zyklus, well wat ech just erkläert hunn ass näischt méi wéi en normale Kommando / Handlung 😀

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

Fir datt Dir dëst verstitt, erkläert ech en extrem wichtegen Detail vu Bash 🙂

De stäerkste kompetent vum Thema kéint mech als falsch oder sou eppes bezeechnen, awer bon, ech schreiwen dat fir déi Ufänger oder manner Experten, soulaang se et verstoen dann super 😉

Et geschitt datt wéi an Bash et ass eppes wéi 0 y 1, dat heescht entweder Dir lieft oder Dir sidd dout, wann e Kommando oder eng Aktioun ausgefouert gëtt: Entweder gutt ausgefouert Kee Problem (1), oder do war der e puer Problem oder Feeler (0).

Mir féieren X Handlung oder Kommando aus, a wat mir gemaach hunn ass gutt oder schlecht ausgefouert ginn, et hätt e Feeler gehat oder net, an do ass den Detail is

Wa wat mir schécken fir ze maachen (an dësem Fall: ping -c 1 IP-ADRESS) huet kee Feeler ginn a war erfollegräich, sou datt et de Wäert zréckbréngt: 1 . Soss, a wann d'Handlung (dat ass de Ping) net erfollegräich war, gëtt et e Wäert zréck 0.

 A schlussendlech, wat de Code hei uewen heescht ass dat:

Wann de Wäert 0 zréckginn ass

Weist den Text: «Net am Netz»

Soss (an zréck NET 0, awer 1)

Weist den Text: «Wann et am Netz ass«

Dëst wat ech Iech just erkläert hunn, wäert eis an der Zukunft fir vill Saachen déngen, well et ass wierklech nëtzlech ze kënnen ze soen datt wann X Aktioun e Feeler huet, Y Handlung maachen, an am Fall X Handlung keng Feeler, loosst Z Aktioun.

Ech weess datt e puer vläicht e bëssen involvéiert sinn, also hunn ech probéiert et op verschidde Weeër z'erklären, a probéiert jiddereen et op déi eng oder aner Manéier ze verstoen. Am Fall wou een am Zweiwel bleift, so mer Bescheed.

Loosst eis eist Skript maachen 😀

Mir mussen d'Schrëtt an dësem Tutorial folgen: Bash: Wéi maacht een ausführbar Skript

Da kopéiere mer de folgende Code an dës Datei (script.sh), an zum Schluss soe mer «Sortie»(Ouni d'Zitater):

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

Et sollt esou ausgesinn (denkt drun datt se d'IP-Adress an d'IP geännert hunn déi se wëllen):

Hei kënnt Dir de lafende Skript gesinn:

% CODE1%

 

Wéi Dir gesitt, zum Schluss erzielt hien eis «Jo et ass am Netz»🙂

Déi wichteg Saach hei ass datt se dëst wierklech vun de Konditioune verstoen, also loossen ech Iech en anere Code fir et erëm z'erklären, awer aus enger anerer Siicht.

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

Wat dat heescht ass einfach, ech verloossen d'Erklärung Zeil fir Zeil:

1. Zeil: Wat mir schreiwen, dat wäert de Wäert vun der Variabel sinn «Text»(Ouni d'Zitater).

2. Zeil: Kontrolléiert ob den Inhalt vun der Variabel (wat mir grad geschriwwen hunn) ass 3.

3. Zeil: Am Fall vun Wiesen 3, et weist eis den Text «Correcto»(Ouni d'Zitater).

4. Zeil: Soss (dat ass, wa mir net 3 geschriwwen hunn).

5. Zeil: Et weist eis den Text «Falsch»(Ouni d'Zitater).

6. Zeil: Enn vun der Konditioun.

Wéi se fäeg sinn ze realiséieren, wa mir setzen Echo an dann tëscht duebelen Zitater («) en Text, dëst wäert dozou féieren datt dësen Text am Terminal ugewisen gëtt. Dat ass, wa mir setzen:

echo "esto es una prueba"

Et weist eis den Text am Terminal: dëst ass en Test

Awer zréck op dëst zweet Beispill, ech weisen Iech d'Nëtzlechkeet (an d'Ausféierung) vun dësem zweete Skript mat eppes GANZ einfach 😀 ... déi typesch «wéi vill ass 1 + 2?«

Ech verloossen Iech de Code vum komplette Skript:

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

Hei ass wéi de Skript funktionnéiert:

% CODE2%

 

A gutt ... näischt méi derbäi.

Dëst ass eppes elementar, einfach jo, awer ëmmer nach hunn ech probéiert et sou gutt wéi méiglech z'erklären, well net jiddereen huet d'Séil vun engem Programméierer, a vill Mol musse mir Skripte maachen wéi dës (oder ähnlech), op jiddfer Fall ech hoffen dësen Artikel wäert Iech nëtzlech sinn 🙂

All Zweifel oder Fro, Plainte oder Virschlag wann ech gelift, loosst et hei, ech äntweren Iech gär an domat léiere mir all e bësse méi 😀

Wat


Den Inhalt vum Artikel hält sech un eis Prinzipie vun redaktionnell Ethik. Fir e Feeler ze mellen klickt hei.

23 Kommentaren, loosst ären

Gitt Äre Kommentar

Är Email Adress gëtt net publizéiert ginn. Néideg Felder sinn markéiert mat *

*

*

  1. Responsabel fir d'Daten: Miguel Ángel Gatón
  2. Zweck vun den Donnéeën: Kontroll SPAM, Kommentarmanagement.
  3. Legitimatioun: Är Zoustëmmung
  4. Kommunikatioun vun den Donnéeën: D'Donnéeë ginn net un Drëttubidder matgedeelt ausser duerch legal Verpflichtung.
  5. Datenspeicher: Datebank gehost vun Occentus Networks (EU)
  6. Rechter: Zu all Moment kënnt Dir Är Informatioun limitéieren, recuperéieren an läschen.

  1.   Jhals sot

    Dir sidd Profi !!! * oder *

    1.    KZKG ^ Gaara sot

      Nah fir näischt 😀
      Wann et Iech zerwéiert huet an et interessant ass, sinn ech zefridden 😉

      Gréiss Frënd

  2.   Zäitmiessung sot

    @ KZKG ^ Gaara,
    ech schwätze vu bash programméiere hunn ech eng Fro:
    Wat ass den Ënnerscheed tëscht enger Variabel wéi dës VAR = hallo ze deklaréieren an se esou ze deklaréieren VAR = $ {VAR: -Hello}?

    Ech erklären:
    http://pastebin.com/a3cfWXeD

    Gréiss 😉

    1.    KZKG ^ Gaara sot

      Moien 😀
      Gutt, ech sinn iwwerhaapt keen Expert am Bash ... eigentlech, ech hu keng Ahnung LOL !!
      Wéi ech d'Variabelen deklaréieren ass et sou:
      : ${OPTFOLDER:="/opt/"}

      Awer well ech et ëmmer esou gemaach hunn, weess ech net wat den Ënnerscheed éierlech kéint sinn 🙁

  3.   Zäitmiessung sot

    @ KZKG ^ Gaara
    Gutt, ech hunn d'Fro gestallt well d'Wourecht war datt ech och net wosst, ech schreiwen normalerweis SlackBuilds an d'Wourecht ass datt Variablen deklaréiert wéi an VAR1 an dëse Skripter vill sinn. Eng séier google Sich huet mir gehollef dës Fro ze klären, ech deelen se mat jidderengem sou datt mir all kënne léieren:

    Schrëft:
    http://pastebin.com/faAQb35w

    Erklärung:
    Variablen deklaréieren vun der Form VAR = $ {VAR: -default_value} heescht datt d'Variabel VAR de Wäert default_value hëlt wann an nëmmen wann de Wäert null ass oder net existéiert.

    Praktescht Beispill:
    wann Dir de Skript ausféiert, freet et e Wäert anzeginn fir an der Variabel VAR ze späicheren, wann eppes aginn ass da weist dat wat agaang ass. Wa mir näischt aginn an dréckt op Enter deklaréiere mir d'Variabel VAR als Null, dofir weist et default_value.

    Merci.

    1.    KZKG ^ Gaara sot

      HAHA ech wosst dat net 😀
      Ok, villmols merci Frënd ... dat hunn ech um Enn vum Artikel gemengt, ech sinn net wëlles eppes bäizebréngen an dat ass et, ech weess datt ech hei ëmmer eppes Neies léieren 😀

      Gréiss a Merci nach eng Kéier.

      1.    Zäitmiessung sot

        du hues recht, et léiert ee verschidde Saachen hei.

        Gréiss a schéi Feierdeeg !! 😀

  4.   Lucas Matias sot

    Terrific an exzellent erkläert +1, d'Zäit et Iech gebraucht huet ...
    mee ech sinn den Effort wäert 😉

    1.    KZKG ^ Gaara sot

      Ech hunn tatsächlech 80% an nëmmen 1 Dag geschriwwen, et huet mech sou laang gebraucht et ze posten just well mäin Internet mech net erlaabt.
      Merci fir Äre Kommentar 😉

  5.   Hugo sot

    Eng aner Manéier fir et ze maachen ass DNS ze benotzen, well heiansdo hunn Netzwierker den ICMP Protokoll blockéiert:

    (Host -ta IP-ADRESS> / dev / null 2> & 1) && echo "Connected to network"

    Dir wäert och bemierken datt an dësem Beispill de Retourwäertcheck implizit ass 😉

    1.    KZKG ^ Gaara sot

      Dir wéi ëmmer Frënd, mat Tipps déi ech net komplett kennen HAHAHA.
      Merci, de Kommentar gëtt appréciéiert an hehe ... nach eng nei Saach déi ech léieren 😀

  6.   Datux sot

    merci

    🙂

  7.   Leper_Ivan sot

    Och wann e puer Deeg zënter der Verëffentlechung vun dësem Thema vergaange sinn, huet et mir vill gedéngt, elo hunn ech e Skript am Bash gemaach .. Merci Gaara ..

  8.   Edgar navarro sot

    Dokter Merci fir d'Hëllef déi Dir Saache fir mech kloer gemaach hutt.

    Just eng Ufro, wéi maachen ech dat wann ee Computer automatesch ophält mat pingelen deen aneren IP ännert. Ech hunn dat.

    d'IP z'änneren
    #! / bin / bash
    ping -c 10 192.168.1.50 # Wann et net automatesch pingt
    ifconfig eth0 192.168.1.50 Netmask 255.255.255.0 Sendung 192.168.1.0
    ifconfig eth0 erof
    ifconfig eth0 erop

  9.   Abraham sot

    well wann Dir mat der vergläicht wann Dir d'Frozeechen benotzt? wéi en Ënnerscheed gëtt et tëscht dem setzen? all anere Bréif

    1.    KZKG ^ Gaara sot

      $? heescht 'déi fréier Ausgab oder Ausgab', dat ass, am Fall vum Resultat vum fréiere Kommando ... 🙂

      1.    Andrés sot

        Et gëtt eng aner Manéier fir datselwecht Resultat z'erreechen, de Ping Kommando direkt als Argument weiderginn, wann:

        wann Ping -c 1 IP-ADRESS; dann
        Echo "Jo et ass am Netz"
        aneren
        Echo "Net am Netz"
        fi

        Wat geschitt ass datt wann de Retourwäert vum Kommando evaluéiert deen Dir als Argument weidergitt, wann et 0 zréckgeet ass et richteg, alles anescht ass falsch. D'Quadratklammer si gläichwäerteg dem Testbefehl. Awer Dir kënnt all Kommando als Argument weiderginn (soulaang de Kommando e bësse Wäert zréckbréngt).

  10.   Wat sot

    Moien, wéi maachen ech e Script.sh mat engem Benotzer X am Skript aus, ech kreéieren e Benotzer Y, an dee Benotzer Y fiert de Script weider aus.

    Kann een dat maachen ??

  11.   Kuktos sot

    Ganz interessant, merci!

  12.   Francisco sot

    Merci fir de Bäitrag, ech war eng Stonn fir et ze verstoen xD, awer ech hunn et verstanen !!!!.

  13.   Eloy sot

    De Skript ass gutt. Arithmetesch kann et och gemaach ginn als ($? == 0) wann et gläich null ass ass et net am Netz, soss ass et am Netz. A wa mir et ëmmer nach e bësse méi interaktiv maache wëllen, kënne mir soen:
    echo -n Gitt d'IP an:
    liesen ip
    ping -c 1 $ ip

  14.   Dario sot

    Moien, ech sinn ganz nei dozou, ech probéieren eng Ticket Nummer (alphanumeresch) duerch eng Liesung ze maachen an ech wëll, datt wa wat aginn ass dat richtegt Format huet (ABC-123456) en "x" Kommando ausféiert an ech net ' t weess wéi Dir et maacht, kënnt Dir mir hëllefen?

    Echo "Gitt Ticket an"
    liesen -p Ticket

    wann $ Ticket = "keng Ahnung (Format ABC-123456"); da cp file.txt $ Ticket; soss echo "falsch Format, probéiert nach eng Kéier"; liesen -p; fi.

    Sécher et ass schrecklech a si laachen haha, awer wéi gesot, ech fänke just domat un.

    Wann ech schlecht erklären sot mir w.e.g. an ech probéieren et besser ze maachen.

    Hug all.

  15.   Humberto Y sot

    Exzellent Erklärung, Gréiss