Hallo 😀
Hierdie keer sal ek u wys hoe u 'n teks met voorwaarde in kan maak Bash, wat vertaal is:
As X-ding wat u wil, gedoen word, word Y-aksie gedoen, as dit nie gedoen word nie, word 'n ander aksie gedoen.
Eenvoudige verduideliking nee 😀
Nou het ek 'n paar minute gedink aan 'n paar voorbeelde om in hierdie handleiding te gebruik, die volgende dilemma / probleem / situasie het by my opgekom:
Ons is op ons maatskappy se netwerk en ons wil weet of X-rekenaar aan die netwerk gekoppel is. Hiervoor maak ons 'n script wat sal hy doen ping in die rigting van daardie rekenaar en as dit op 'n netwerk is (dit wil sê as dit die ping) sal vir ons sê dat JA, dit is op die netwerk, anders (dit wil sê, dit is nie op die netwerk nie), sal dit vir ons sê dat dit NIE op die netwerk is nie.
Sodra dit gedoen is, sal ek nou verduidelik hoe om met toestande cycle te fiets
Hier is die kode:
ping -c 1 DIRECCION-IP
if [ $? -ne 0 ]; then
echo "No está en red"
else
echo "Sí está en red"
fi
Moenie bekommerd wees nie, ek sal dit aan u verduidelik explain
ping is die opdrag wat ons sal gebruik, en dit sal ons vertel of die rekenaar op die netwerk is. Om te weet watter rekenaar ons wil nagaan of dit op die netwerk is, moet ons verander IP-ADRES deur natuurlik die IP-adres van die rekenaar wat ons wil nagaan.
Soos u kan sien, sit ek «-c 1Wat vir ons nodig is. As ons 'n rekenaar ping, stop hierdie aksie (die ping) totdat ons onsself druk [Ctrl] + [C], so gestel «-c 1»Ons sê u moet net een verifikasie doen (slegs een pingpoging) en geen ander nie; dit sal dadelik stop, dit wil sê ... dit sal kyk of die rekenaar net een keer op die netwerk is.
As u hieroor twyfel, is daar geen pyn nie ... hulle sê dit en ek sal dit graag weer aan u kan verduidelik explain
Nou kom die siklus, want wat ek nou net verduidelik het, is niks anders nie as 'n normale opdrag / aksie 😀
if [ $? -ne 0 ]; then
echo "No está en red"
else
echo "Sí está en red"
fi
Sodat u dit verstaan, sal ek 'n uiters belangrike detail van Bash explain verduidelik
Die kundigste van die onderwerp kan my as verkeerd of iets dergeliks merk, maar hey, ek skryf dit vir die beginners of minder kundiges, solank hulle dit dan goed verstaan 😉
Dit gebeur dat soos in Bash dit is iets soos 0 y 1, dit wil sê of jy lewe of dat jy dood is wanneer 'n opdrag of aksie uitgevoer word: óf goed uitgevoer Geen probleem (1), of daar was 'n paar probleem of fout (0).
Ons voer X-optrede of opdrag uit, en wat ons gedoen het, is goed of sleg uitgevoer, dit het dalk 'n fout gehad of nie, en dit is hier waar die detail is 😉
As wat ons stuur om te doen (in hierdie geval: ping -c 1 IP-ADRES) het nie 'n fout gegee nie en was suksesvol, dus sal dit die waarde oplewer: 1 . Andersins, en as die handeling (dit wil sê die ping) nie suksesvol was nie, sal dit waarde teruggee 0.
En laastens, wat die bogenoemde kode beteken, is dit:
As waarde 0 dan teruggestuur is
Vertoon die teks: «Nie op die netwerk nie»
Anders (en NIE 0 nie, maar 1 word terugbesorg)
Vertoon die teks: «As dit in die netwerk is«
Dit wat ek nou net aan u verduidelik het, sal ons in die toekoms vir baie dinge dien, want dit is baie nuttig om te kan sê dat as X-aksie 'n fout gee, Y-aksie doen, en as X-aksie nie 'n fout gegee het nie, dan Z-aksie.
Ek weet dat sommige dalk 'n bietjie betrokke raak, en daarom het ek dit op verskillende maniere probeer verduidelik en probeer om almal dit op die een of ander manier te laat verstaan. Laat weet my as iemand twyfel.
Kom ons maak nou ons skrif 😀
Ons moet die stappe in hierdie handleiding volg: Bash: Hoe om 'n uitvoerbare skrif te maak
Kom ons kopieer die volgende kode in die lêer (skrif.sh), en laat ons aan die einde sê «verlaat»(Sonder die aanhalings):
ping -c 1 DIRECCION-IP
if [ $? -ne 0 ]; then
echo "No está en red"
else
echo "Sí está en red"
fi
Dit moet so lyk (onthou dat hulle die IP-ADRES moes verander na die IP wat hulle wil hê):
Hier kan u die lopende script sien:
% KODE1%
Soos u kan sien, vertel hy ons uiteindelik «Ja, dit is in die netwerk»🙂
Die belangrikste hier is dat hulle dit regtig verstaan, dus laat ek u 'n ander kode om dit weer te verduidelik, maar vanuit 'n ander oogpunt.
read "texto"
if [ "$texto" = "3" ]; then
echo "Correcto"
else
echo "Incorrecto"
fi
Wat dit beteken is eenvoudig, ek laat die verduideliking reël vir reël:
1ste reël: Wat ons skryf, dit is die waarde van die veranderlike «teks»(Sonder die aanhalings).
2de reël: Kyk of die veranderlike (wat ons so pas geskryf het) se inhoud is 3.
3ste reël: In geval van wees 3, dit sal ons die teks wys «Korrigeer»(Sonder die aanhalings).
4de reël: Andersins (dit wil sê as ons nie 3 geskryf het nie).
5de reël: Dit sal ons die teks wys «verkeerde»(Sonder die aanhalings).
6de reël: Einde van die toestand.
Soos hulle kon besef, as ons dit stel mis en dan tussen dubbele aanhalings («) 'n teks, dan sal die teks in die terminale vertoon word. Dit wil sê as ons dit stel:
echo "esto es una prueba"
Dit sal ons die teks in die terminale wys: hierdie is 'n toets
Maar as ek na hierdie tweede voorbeeld terugkeer, sal ek u die nut (en uitvoering) van hierdie tweede script wys met iets BAIE eenvoudig 😀 ... die tipiese «hoeveel is 1 + 2?«
Ek laat die kode van die volledige skrif vir u:
#!/bin/bash
# -*- ENCODING: UTF-8 -*-
echo "¿Cuánto es 1 + 2?"
read "texto"
if [ "$texto" = "3" ]; then
echo "Correcto"
else
echo "Incorrecto"
fi
exit
Dit is hoe die skrif werk:
% KODE2%
En wel ... niks meer om by te voeg nie.
Dit is iets elementêrs, eenvoudig, ja, maar tog het ek probeer om dit so goed as moontlik te verklaar, want nie almal het die siel van 'n programmeerder nie, en ons moet baie keer skrifte soos hierdie (of soortgelyk) maak, in elk geval hoop ek dat hierdie artikel vir u nuttig sal wees iemand 🙂
Enige twyfel of vraag, klagte of voorstel, laat dit hier, ek sal u graag antwoord en sodoende leer ons almal 'n bietjie meer 😀
Groete
26 kommentaar, los joune
Jy is 'n pro !!! * of *
Niks verniet 😀
As dit u gedien het en dit interessant is, is ek tevrede 😉
Groete vriend
@ KZKG ^ Gaara,
praat van bash programmering het ek 'n vraag:
Wat is die verskil tussen die verklaring van 'n veranderlike soos hierdie VAR = hallo en verklaar dit soos hierdie VAR = $ {VAR: -hello}?
Ek verduidelik:
http://pastebin.com/a3cfWXeD
groete 😉
Hallo 😀
Wel, ek is glad nie 'n kundige in bash nie ... eintlik het ek geen idee LOL nie !!
Terwyl ek die veranderlikes verklaar, is dit soos volg:
: ${OPTFOLDER:="/opt/"}
Maar omdat ek dit altyd so gedoen het, weet ek nie wat die verskil eerlik kan wees nie 🙁
@ KZKG ^ Gaara
Wel, ek het die vraag gevra, want die waarheid is dat ek ook nie geweet het nie, ek skryf gewoonlik SlackBuilds en die waarheid is dat veranderlikes wat in VAR1 verklaar word in hierdie skrifte volop is. 'N Vinnige google-soektog het my gehelp om hierdie vraag duidelik te maak, ek deel dit met almal sodat ons almal kan leer:
script:
http://pastebin.com/faAQb35w
verduideliking:
Om veranderlikes van die vorm VAR = $ {VAR: -default_value} te verklaar, beteken dat die veranderlike VAR die waarde default_value sal neem as en slegs as die waarde nul is of nie bestaan nie.
Praktiese voorbeeld:
By die uitvoering van die script word gevra om 'n waarde in te voer wat in die VAR-veranderlike gestoor moet word. As iets ingevoer word, sal dit wys wat ingevoer is. As ons niks invoer nie en druk op enter, verklaar ons die veranderlike VAR as nul, daarom wys dit waarde_default.
Groete.
HAHA ek het dit nie geweet nie 😀
Ok, baie dankie vriend ... dit is wat ek aan die einde van die artikel bedoel, ek is nie van plan om iets te leer nie en dit is dit, ek weet dat ek altyd iets nuuts hier sal leer learn
Groete en nogmaals dankie.
jy het gelyk, mens leer hier verskillende dinge.
groete en gelukkige vakansie !! 😀
Baie goed en uitstekend verduidelik +1, die tyd wat dit jou sou neem ...
maar ek is die moeite werd 😉
Ek het eintlik 80% binne net 1 dag geskryf, dit het my so lank geneem om dit te plaas, net omdat my internet my nie toegelaat het nie.
Dankie vir u opmerking 😉
Nog 'n manier om dit te doen, is die gebruik van DNS, aangesien ICMP-protokolle soms in netwerke geblokkeer word:
(gasheer -ta IP-ADRES> / dev / null 2> & 1) && eggo "Gekoppel aan netwerk"
U sal ook opmerk dat die retourwaarde-tjek in hierdie voorbeeld implisiet is 😉
Jy soos altyd vriend, met wenke wat ek nie heeltemal ken nie HAHAHA.
Dankie, die opmerking word waardeer en hehe ... nog 'n nuwe ding wat ek leer 😀
Dankie
🙂
Al het 'n paar dae verloop sedert die publikasie van hierdie onderwerp, het dit my baie gedien, noudat ek 'n teks in bash gemaak het .. Dankie Gaara ..
Dok. Dankie vir die hulp wat u dinge vir my duidelik gemaak het.
Net 'n vraag, hoe kan ek dit doen wanneer die een rekenaar outomaties ophou ping, die ander IP verander. Ek het dit.
om die IP te verander
#! / bin / bash
ping -c 10 192.168.1.50 # as dit nie outomaties ping nie
ifconfig eth0 192.168.1.50 netmasker 255.255.255.0 uitgesaai 192.168.1.0
ifconfig eth0 af
ifconfig eth0 op
want as jy die vraagteken gebruik as jy dit vergelyk? watter verskil is daar tussen om die? enige ander brief
$? beteken 'die vorige uitvoer', dit wil sê in die geval van die resultaat van die vorige opdrag ... 🙂
Daar is 'n ander manier om dieselfde resultaat te bereik deur die ping-opdrag direk deur te gee as 'n argument as:
as ping -c 1 IP-ADRES; dan
eggo "Ja, dit is op die net"
anders
eggo "Nie op die netwerk nie"
fi
Wat gebeur, is dat as die retourwaarde van die opdrag wat u as argument evalueer, beoordeel word as dit 0 is, is dit waar, is niks anders vals nie. Die hakies is gelykstaande aan die toetsopdrag. Maar u kan enige opdrag as argument deurgee (solank die opdrag 'n waarde oplewer).
Hallo, hoe voer ek 'n script.sh uit met 'n gebruiker X in die script skep ek 'n gebruiker Y, en die gebruiker Y gaan voort met die uitvoering van die script.sh
Kan dit gedoen word ??
Baie interessant, dankie!
Dankie vir die bydrae, ek was 'n uur lank besig om dit te verstaan xD, maar ek het dit verstaan !!!!.
Die skrif is goed. Rekenkundig kan dit ook gedoen word as ($? == 0) as dit gelyk is aan nul, is dit nie op die netwerk nie, anders is dit op die netwerk. En as ons dit nog 'n bietjie meer interaktief wil maak, kan ons sê:
echo -n Voer die IP in:
lees ip
ping -c 1 $ ip
Hallo, ek is baie nuut hieroor, ek probeer om 'n kaartjie nommer (alfanumeriek) te maak deur middel van 'n lees en ek wil hê dat as wat ingevoer word die regte formaat het (ABC-123456) 'n "x" opdrag uitvoer en ek weet nie hoe om dit te doen nie, kan u my help?
eggo "Voer kaartjie in"
lees -p kaartjie
as $ ticket = "geen idee (ABC-123456-formaat"); dan cp file.txt $ kaartjie; anders eggo "Verkeerde formaat, probeer weer"; lees -p; fi.
Seker dit is verskriklik en hulle lag haha, maar soos ek gesê het, begin ek net hiermee.
Vertel my as ek sleg verduidelik, en ek probeer beter doen.
Omhels almal.
Uitstekende verduideliking, groete
Ek het 'n bietjie twyfel met if, else en ander.
Ek wil 'n skrip hê om seker te maak dat 'n lêer bestaan (een van logs) en indien nie, om dit te skep en later daaraan te skryf. Maar as dit bestaan, wil ek hê jy moet net daaraan skryf.
Wat ek het is:
datum = `datum -R`
#Ek het veranderlike datum getoets, wat nie opgedateer word tussen die begin van 'n
#verwerk en eindig, soms kan 'n uur verbygaan en die regte tyd kom nie uit nie.
if [-f /home/user/logs/test.log];
dan
raak /home/usuario/logs/test.log aan
anders
eggo "$ datum: Opgedateer" >> /home/user/logs/test.log
eggo «————————————————» >> /home/user/logs/test.log
fi
In teorie behoort dit goed te wees, maar die realiteit is dat dit nie opgedateer word as die verwysde lêer reeds bestaan nie
jammer, ek het gesien dat dit nie gestuur is nie en dit het verdubbel