Hola 😀
En aquesta ocasió els mostraré com fer un script amb condició en xoc, La qual cosa traduït és:
Si es compleix X cosa que vostès vulguin, es fa I acció, si no es compleix llavors es fa una altra acció.
Simple l'explicació no 😀
Ara, he pensat durant uns minuts algun exemple per usar en aquest tutorial, se m'ha ocorregut el següent dilema / problema / situació:
Som a la xarxa de la nostra empresa, i desitgem saber si X ordinador està connectat a la xarxa. Per això fem una script que farà fer ping cap a aquest ordinador, i si està en xarxa (o sigui, si torna el fer ping) Ens dirà que SÍ, està en xarxa, en cas contrari (o sigui, que no estigui en xarxa) ens dirà que NO està en xarxa.
Un cop fet això, ara els explicaré com fer un cicle amb condicions 🙂
Eh aquí el codi:
ping -c 1 DIRECCION-IP
if [ $? -ne 0 ]; then
echo "No está en red"
else
echo "Sí está en red"
fi
No es preocupin, els explico això a l'detall 😉
fer ping és el comandament que farem servir, i ens dirà si aquesta PC està en xarxa. Per dir-li què PC volem comprovar si està o no en xarxa, hem de canviar DIRECCIÓ-IP per òbviament, l'adreça IP de PC que desitgem comprovar.
Com veuen, vaig posar «-c 1«, La qual cosa ens cal. Quan fem ping a un ordinador, aquesta acció no s'atura (el ping) fins que nosaltres mateixos pressionem [Ctrl] + [C], De manera que posant «-c 1»Li vam indicar que faci només una verificació (només un intent de ping) i cap altre, això farà que s'aturi a l'instant, o sigui ... comprovarà si l'ordinador està en xarxa només una vegada.
Si tenen dubtes amb això, sense pena ... ho diuen i jo amb MOLT gust se'ls explico de nou 😉
Ara ve el cicle, ja que el que acabo d'explicar no és més que una ordre / acció normal 😀
if [ $? -ne 0 ]; then
echo "No está en red"
else
echo "Sí está en red"
fi
Perquè entenguin això, els explicaré un detall summament important de Bash 🙂
Els més coneixedors del tema em podrien titllar de equivocat o alguna cosa així, però bé, això ho escric per a la qual novells o menys experts, mentre ells ho entenguin llavors genial 😉
Passa que com a xoc és una mena 0 y 1, És a dir, o estàs viu o estàs mort, quan s'executa una ordre o acció: O es va executar bé sense problemes (1), o hi va haver algun problema o error (0).
Nosaltres vam fer X acció o comandament, i això que vam fer pot haver-se efectuat bé o malament, puc haver tingut error o no, i aquí és on hi ha el detall 😉
Si el que enviem a fer (en aquest cas: ping -c 1 DIRECCIÓ-IP) No va donar error i es va efectuar bé, llavors retornarà el valor: 1 . En cas contrari, i que l'acció (o sigui, el ping) no fos reeixit, tornarà valor 0.
I finalment, el que significa el codi anterior és això:
Si es va retornar valor 0 llavors
Posa en pantalla el text: «No està en xarxa»
Altrament (i que es retorni NO 0, sinó 1)
Posa en pantalla el text: «Si està en xarxa«
Això que els acabo d'explicar, ens servirà en un futur per a moltíssimes coses, ja que és realment útil poder dir que si X acció va donar error, feu I acció, i en cas que X acció no hagi donat error, que faci Z acció.
Sé que a alguns podria liaros una mica, pel que he intentat explicar-ho de diverses formes diferents, intentant que tots ho entenguin d'una via o una altra. En cas que algú es quedi amb dubtes, m'ho fa saber.
Ara, fem el nostre script 😀
Hem de seguir els passos d'aquest tutorial: Bash: Com fer un script executable
Després copiem el següent codi en aquest arxiu (guió.sh), I a la fi posem «sortir de»(Sense les cometes):
ping -c 1 DIRECCION-IP
if [ $? -ne 0 ]; then
echo "No está en red"
else
echo "Sí está en red"
fi
Les ha de quedar així (recordin que han d'haver canviat DIRECCIÓ-IP per la IP que desitgen):
Aquí poden veure l'script en execució:
% CODE1%
Com veuen, a la fi ens diu «Sí està en xarxa»🙂
L'important aquí és que en realitat entenguin això de les condicions, de manera que els deixo un altre codi per tornar a explicar-ho, però des d'un altre punt de vista.
read "texto"
if [ "$texto" = "3" ]; then
echo "Correcto"
else
echo "Incorrecto"
fi
El que això significa és simple, els deixo línia a línia l'explicació:
1ra línia: El que escrivim, aquest serà el valor de la variable «text»(Sense les cometes).
2a línia: Comprova si el contingut de la variable (el que acabem d'escriure) és 3.
3ra línia: En cas de ser 3, Ens mostrarà el text «Correcte»(Sense les cometes).
4ta línia: Altrament (o sigui, en cas que no haguem escric 3).
5ta línia: Ens mostrarà el text «incorrecte»(Sense les cometes).
6ta línia: Fi de la condició.
Com han pogut adonar-se, si posem trobo i seguidament entre cometes dobles («) Un text, això farà que es mostri a la terminal aquest text. O sigui, si posem:
echo "esto es una prueba"
Ens mostrarà a la terminal el text: això és una prova
Però tornant a aquest segon exemple, els mostraré la utilitat (i execució) d'aquest segon script amb alguna cosa MOLT simple 😀 ... el típic «quant és 1 + 2?«
Els deixo el codi de l'script complet:
#!/bin/bash
# -*- ENCODING: UTF-8 -*-
echo "¿Cuánto es 1 + 2?"
read "texto"
if [ "$texto" = "3" ]; then
echo "Correcto"
else
echo "Incorrecto"
fi
exit
Els deixo aquí com funciona l'script:
% CODE2%
I bé ... res més que afegir.
Això és una cosa elemental, simple sí, però tot i així he intentat explicar-ho el millor possible, ja que no tots tenen ànima de programador, i moltes vegades necessitem fer scripts com aquests (o similars), de totes maneres espero que aquest article li sigui d'utilitat a algú 🙂
Qualsevol dubte o pregunta, queixa o suggeriment si us plau, la deixen aquí, amb molt de gust els responc i així, tots aprenem una mica més 😀
Salutacions
Ets un pro !!! * O *
Nah per a res 😀
Si et va servir i resulta interessant, em dono per satisfet 😉
Salutacions amic
@ KZKG ^ Gaara,
parlant de programació en bash tinc un dubte:
¿Quina és la diferència entre declarar una variable així VAR = hola i declarar-la d'aquesta altra manera VAR = $ {VAR: -Hola}?
m'explico:
http://pastebin.com/a3cfWXeD
salutacions 😉
Hola 😀
Bé, no sóc expert en Bash ni de bon tros ... en realitat, no tinc ni idea LOL !!
Com jo declaro les variables és així:
: ${OPTFOLDER:="/opt/"}
Però perquè sempre ho vaig fer així, no sé quina podria ser la diferència honestament 🙁
@ KZKG ^ Gaara
bo la pregunta la vaig fer perquè la veritat jo tampoc sabia, jo acostumo a escriure SlackBuilds i la veritat les variables declarades com en VAR1 abunden en aquests scripts. Una ràpida recerca a google em va ajudar a aclarir aquest dubte, la comparteixo amb tots perquè tots aprenguem:
script:
http://pastebin.com/faAQb35w
explicació:
Declarar variables de la forma VAR = $ {VAR: -valor_por_defecto} vol dir que la variable VAR prendrà el valor valor_por_defecto si i només si el valor és nul o no existeix.
Exemple pràctic:
a l'executar l'script es demana introduir un valor per a ser emmagatzemat en la variable VAR, si s'ingressa alguna cosa mostrarà l'ingressat. Si no ingressem res i pressionem enter estem declarant a la variable VAR com nul·la, per tant mostra valor_por_defecto.
Salutacions.
JAJA no sabia això 😀
D'acord, moltes gràcies amic ... a això em referia amb el final de l'article, no pretenc ensenyar alguna cosa i llest res més, sé que sempre aprendré alguna cosa nova aquí 😀
Salutacions i gràcies una vegada més.
tens raó, un aprèn diverses coses aquí.
salutacions i bones festes !! 😀
Boníssim i excel·lentment explicat +1, el temps que t'haurà portat ...
però valgut l'esforç 😉
En realitat vaig redactar al 80% en sol 1 dia, em vaig demorar tant en publicar-només perquè el meu internet no em deixava.
Gràcies pel teu comentari 😉
Una altra forma de fer-ho és utilitzant DNS, ja que de vegades les xarxes tenen bloquejat el protocol ICMP:
(Host -ta DIRECCIÓ-IP> / dev / null 2> & 1) && echo «Connectat a la xarxa»
A més notaran que en aquest exemple la comprovació de el valor de retorn és implícita 😉
Tu com sempre amic, amb tips que desconec completament JAJAJA.
Gràcies, s'agraeix el comentari i jeje ... una altra coseta nova que aprenc 😀
Gràcias
🙂
Tot i que han passat diversos dies des de la publicació d'aquest tema, m'ha servit molt, ara que vaig fer un script en bash .. Gràcies Gaara ..
Doc. Gràcies per l'ajuda em vas deixar les coses clares.
Només una consulta, com faig perquè quan un equip deixi de fer ping automàticament l'altre canviï d'IP. Tinc això.
per canviar la IP
#! / Bin / bash
ping -c 10 192.168.1.50 # Si no fa ping automàticament
ifconfig eth0 192.168.1.50 màscara de xarxa 255.255.255.0 emissió 192.168.1.0
ifconfig eth0 baixa
ifconfig eth0 up
perquè a l'comparar amb l'if fas servir el signe d'interrogació? que diferència hi ha entre posar el? qualsevol altra lletra
$? significa 'la sortida o output anterior', és a dir, en cas que el resultat de la comanda anterior ... 🙂
Hi ha una altra manera d'aconseguir el mateix resultat, passar la comanda ping directament com a argument a if:
if ping -c 1 DIRECCIÓ-IP; then
trobo «Sí és a la xarxa»
else
trobo «No està a la xarxa»
fi
El que passa és que if avalua el valor de retorn de la comanda que passis com a argument, si retorna 0 és veritable, qualsevol altra cosa és fals. Els parèntesi de claudàtors equivalen a la comanda test. Però pots passar qualsevol ordre com a argument (sempre que la comanda retorni algun un valor).
Hola com faig per executar un script.sh amb un usuari X en l'script crec un usuari I, i que l'usuari I segueixi executant el script.sh
Es pot fer això ??
Molt interessant Gràcies!
Gràcies per l'aportació, he estat una hora per entendre-ho xD, però el entesa !!!!.
Està molt bé l'script. De forma aritmètica també es podria fer com ($? == 0) si és igual a zero no està en xarxa, en cas contrari si està en xarxa. I si encara ho volem fer una mica més interactiu li podem dir:
echo -n Introdueix la Ip:
read ip
ping -c 1 $ ip
Hola, sóc molt nou en això, estic tractant de fer que a través d'un read ingressar un nombre de tiquet (alfanumèric) i vull que si el que s'ingressa té el format correcte (ABC-123456) executi una ordre «x» i no se com fer-ho, em podrian ajudar?
trobo «Introduïu tiquet»
read -p tiquet
if $ tiquet = «no idea (format ABC-123456»); then cp file.txt $ tiquet; else echo «format incorrecte, ho a provar»; read -p; fi.
segur aquesta horrible i es rian jaja, però com vaig dir estic recent començant amb això.
Si m'expliqui mal si us plau diganme i tracte de fer-ho millor.
Abraçada a tots.
Excel·lent explicació, salutacions
Tinc un petit dubte amb if, else i altres.
Jo vull que un script comprovi que un arxiu existeix (un de logs) i si no, que ho creu i posteriorment escriviu-hi. Però si existeix vull que només escrigui al.
El que tinc és:
data=`date -R`
#Estava provant variable date, que no se m'actualitza entre que comença un
#procés i acaba, de vegades pot passar una hora i no surt l'hora correcta.
if [ -f /home/usuari/logs/prova.log ];
llavors
touch /home/usuari/logs/prova.log
else
fet «$data: Actualitzat» >> /home/usuari/logs/prueba.log
fet «———————————————-» >> /home/usuari/logs/prova.log
fi
En teoria hauria d'estar bé, però la realitat és que no s'actualitza si ja existeix el fitxer a què fa referència
perdó, veia que no s'enviava i s'ha duplicat