Saluton 😀
Ĉi-foje mi montros al vi kiel krei skripton kun kondiĉo en Bash, kiu tradukita estas:
Se X-afero, kiun vi volas, plenumas, Y-ago plenumiĝas, se ĝi ne plenumiĝas, tiam alia ago plenumiĝas.
Simpla klarigo ne 😀
Nun, mi pensis dum kelkaj minutoj pri iu ekzemplo uzota en ĉi tiu lernilo, la sekva dilemo / problemo / situacio okazis al mi:
Ni estas en la reto de nia kompanio, kaj ni volas scii ĉu X-komputilo estas konektita al la reto. Por ĉi tio ni faras skripto kion li faros ping al tiu komputilo, kaj se ĝi estas en reto (tio estas, se ĝi redonas la ping) diros al ni, ke JES, ĝi estas en la reto, alie (tio estas, ĝi ne estas en la reto) ĝi diros al ni, ke ĝi NE estas en la reto.
Post kiam ĉi tio estos farita, nun mi klarigos kiel bicikli kun kondiĉoj 🙂
Jen la kodo:
ping -c 1 DIRECCION-IP
if [ $? -ne 0 ]; then
echo "No está en red"
else
echo "Sí está en red"
fi
Ne zorgu, mi klarigos ĉi tion al vi detale 😉
ping estas la komando, kiun ni uzos, kaj ĝi diros al ni, ĉu tiu komputilo estas en la reto. Por diri al vi, kiun komputilon ni volas kontroli, ĉu ĝi estas en la reto aŭ ne, ni devas ŝanĝi IP-ADRESO evidente per la IP-adreso de la komputilo, kiun ni volas kontroli.
Kiel vi vidas, mi metis «-c 1«, Kiu estas necesa por ni. Kiam ni pingas komputilon, ĉi tiu ago ne ĉesas (la ping) ĝis ni premas nin mem [Ctrl] + [C], do metante «-c 1»Ni diras al vi, ke vi faru nur unu kontrolon (nur unu ping-provo) kaj neniun alian, ĉi tio haltigos ĝin tuj, tio estas ... ĝi kontrolos, ĉu la komputilo estas en la reto nur unufoje.
Se vi havas dubojn pri tio, neniu doloro ... ili diras tiel kaj mi volonte klarigos ĝin al vi denove 😉
Nun venas la ciklo, ĉar tio, kion mi ĵus klarigis, estas nur normala komando / ago 😀
if [ $? -ne 0 ]; then
echo "No está en red"
else
echo "Sí está en red"
fi
Por ke vi komprenu ĉi tion, mi klarigos ekstreme gravan detalon pri Bash 🙂
La plej sperta pri la temo povus taksi min kiel malĝusta aŭ io simila, sed hej, mi skribas ĉi tion por la novuloj aŭ malpli da spertuloj, se ili komprenas ĝin tiam bonega
Okazas, ke kiel en Bash ĝi estas io tia 0 y 1, tio estas, aŭ vi vivas aŭ vi mortis, kiam ordono aŭ ago estas plenumita: Aŭ bone ekzekutita Nedankinde (1), aŭ estis iuj problemo aŭ eraro (0).
Ni plenumas X-agon aŭ ordonon, kaj tio, kion ni faris, eble bone aŭ malbone plenumiĝis, ĝi eble havis eraron aŭ ne, kaj jen la detalo 😉
Se kion ni sendas fari (ĉi-kaze: ping -c 1 IP-ADRESO) ne donis eraron kaj sukcesis, do ĝi redonos la valoron: 1 . Alie, kaj se la ago (tio estas, la ping) ne sukcesis, ĝi redonos valoron 0.
Kaj fine, kion signifas la supra kodo, jen:
Se valoro 0 estis redonita tiam
Montri la tekston: «Ne en reto»
Alie (kaj redonu NE 0, sed 1)
Montri la tekston: «Se ĝi estas en reto«
Ĉi tio, kiun mi ĵus klarigis al vi, utilos al ni estontece por multaj aferoj, ĉar estas vere utile povi diri, ke se X-ago donis eraron, faru Y-agon, kaj se X-ago ne donis eraron, lasu Z-agon.
Mi scias, ke iuj povus iom konfuziĝi, do mi provis klarigi ĝin per diversaj manieroj, provante igi ĉiujn kompreni ĝin tiamaniere. Kaze ke iu restos en dubo, sciigu min.
Nun ni kreu nian skripton 😀
Ni devas sekvi la paŝojn en ĉi tiu lernilo: Bash: Kiel fari plenumeblan skripton
Tiam ni kopiu la sekvan kodon en tiun dosieron (skripto.sh), kaj fine ni diru «eliro»(Sen la citiloj):
ping -c 1 DIRECCION-IP
if [ $? -ne 0 ]; then
echo "No está en red"
else
echo "Sí está en red"
fi
Ĝi devus aspekti tiel (memoru, ke ili certe ŝanĝis la IP-ADRESON al la IP, kiun ili volas):
Ĉi tie vi povas vidi la kurantan skripton:
% CODE1%
Kiel vi vidas, finfine li diras al ni «Jes ĝi estas en reto»🙂
La grava afero ĉi tie estas, ke ili efektive komprenas ĉi tion pri la kondiĉoj, do mi lasas al vi alian kodon por klarigi ĝin denove, sed el alia vidpunkto.
read "texto"
if [ "$texto" = "3" ]; then
echo "Correcto"
else
echo "Incorrecto"
fi
Kion ĉi tio signifas estas simpla, mi lasas la klarigon linion post linio:
Unua linio: Kion ni skribas, tio estos la valoro de la variablo «texting»(Sen la citiloj).
Dua linio: Kontrolu ĉu la enhavo de la variablo (kion ni ĵus skribis) estas 3.
Unua linio: En kazo de esti 3, ĝi montros al ni la tekston «Correcto»(Sen la citiloj).
4-a linio: Alie (tio estas, se ni ne skribis 3).
5-a linio: Ĝi montros al ni la tekston «Nekorekta»(Sen la citiloj).
6-a linio: Fino de stato.
Kiel ili povis konstati, se ni diros eĥo kaj tiam inter duoblaj citiloj («) teksto, tio igos tiun tekston montriĝi en la terminalo. Tio estas, se ni metas:
echo "esto es una prueba"
Ĝi montros al ni la tekston en la fina stacio: ĉi tio estas provo
Sed revenante al ĉi tiu dua ekzemplo, mi montros al vi la utilecon (kaj plenumadon) de ĉi tiu dua skripto kun io TRE simpla 😀 ... la tipa «kiom kostas 1 + 2?«
Mi lasas la kodon de la kompleta skripto:
#!/bin/bash
# -*- ENCODING: UTF-8 -*-
echo "¿Cuánto es 1 + 2?"
read "texto"
if [ "$texto" = "3" ]; then
echo "Correcto"
else
echo "Incorrecto"
fi
exit
Jen kiel funkcias la skripto:
% CODE2%
Kaj nu ... nenion pli por aldoni.
Ĉi tio estas io elementa, simpla jes, sed tamen mi provis klarigi ĝin kiel eble plej bone, ĉar ne ĉiuj havas la animon de programisto, kaj multfoje ni bezonas fari skriptojn kiel ĉi tiuj (aŭ similaj), ĉiukaze mi esperas, ke ĉi tiu artikolo utilos al vi iu 🙂
Ajna dubo aŭ demando, plendo aŭ sugesto bonvolu lasi ĝin ĉi tie, mi volonte respondos al vi kaj tiel, ni ĉiuj lernas iom pli 😀
salutoj
26 komentoj, lasu la viajn
Vi estas profesiulo !!! * aŭ *
Nah por nenio 😀
Se ĝi servis vin kaj ĝi estas interesa, mi estas kontenta 😉
Salutojn amiko
@ KZKG ^ Gaara,
parolante pri bash-programado, mi havas demandon:
Kio estas la diferenco inter deklari variablon kiel ĉi tiun VAR = saluton kaj deklari ĝin tiel VAR = $ {VAR: -hello}?
Mi klarigas:
http://pastebin.com/a3cfWXeD
salutojn 😉
Saluton 😀
Nu, mi tute ne spertas pri bash ... efektive, mi tute ne scias LOL !!
Dum mi deklaras la variablojn, ĝi estas tiel:
: ${OPTFOLDER:="/opt/"}
Sed ĉar mi ĉiam tiel faris, mi ne scias, kio povus esti la diferenco honeste 🙁
@ KZKG ^ Gaara
Nu mi demandis la demandon ĉar la vero estas, ke ankaŭ mi ne sciis, mi kutime verkas SlackBuilds kaj la vero estas, ke variabloj deklaritaj kiel en VAR1 abundas en ĉi tiuj skriptoj. Rapida gugla serĉo helpis min klarigi ĉi tiun demandon, mi dividas ĝin kun ĉiuj por ke ni ĉiuj lernu:
Skripto:
http://pastebin.com/faAQb35w
Klarigo:
Deklari variablojn laŭ la formo VAR = $ {VAR: -default_value} signifas, ke la variablo VAR prenos la valoron default_value se kaj nur se la valoro estas nula aŭ ne ekzistas.
Praktika ekzemplo:
Dum plenumado de la skripto, oni petas enigi valoron konservotan en la variablo VAR, se io estas enirita, ĝi montros tion, kio estis enirita. Se ni enigas ion kaj premas enen, ni deklaras la variablon VAR kiel nula, tial ĝi montras value_default.
Salutojn.
HAHA Mi ne sciis tion 😀
Bone, dankegon amiko ... tion mi celis per la fino de la artikolo, mi ne intencas instrui ion kaj jen, mi scias, ke mi ĉiam lernos ion novan ĉi tie 😀
Saluton kaj dankon denove.
vi pravas, oni lernas plurajn aferojn ĉi tie.
salutojn kaj feliĉajn festojn !! 😀
Terura kaj bonege klarigita +1, la tempo, kiun ĝi prenis al vi ...
sed mi valoras la penon 😉
Fakte mi skribis 80% en nur 1 tago, mi bezonis tiel longe publikigi ĝin nur ĉar mia interreto ne permesis al mi.
Dankon pro via komento 😉
Alia maniero fari ĝin estas uzi DNS, ĉar kelkfoje retoj havas ICMP-protokolon blokita:
(gastiganto -ta IP-ADRESO> / dev / null 2> & 1) && echo "Konektita al reto"
Vi ankaŭ rimarkos, ke en ĉi tiu ekzemplo la revena valora kontrolo estas implicita 😉
Vi kiel ĉiam amiko, kun konsiloj, kiujn mi ne scias tute HAHAHA.
Dankon, la komento dankas kaj hehe ... alia nova afero, kiun mi lernas 😀
danke
🙂
Kvankam kelkaj tagoj pasis post la publikigo de ĉi tiu temo, ĝi multe servis al mi, nun kiam mi faris skripton en bash. Dankon Gaara ..
Doktoro. Dankon pro la helpo, ke vi klarigis aferojn por mi.
Nur demando, kiel mi faras, ke kiam unu komputilo ĉesas pingi aŭtomate la alia ŝanĝas IP. Mi havas ĉi tion.
ŝanĝi la IP
#! / bin / bash
ping -c 10 192.168.1.50 # Se ĝi ne ping aŭtomate
ifconfig eth0 192.168.1.50 retmasko 255.255.255.0 elsendo 192.168.1.0
ifconfig eth0 malsupren
ifconfig eth0 supren
ĉar kiam vi komparas kun la se vi uzas la demandosignon? kia diferenco estas inter meti la? iu ajn alia letero
$? signifas 'la antaŭa eligo aŭ eligo', tio estas, se la rezulto de la antaŭa komando ... 🙂
Estas alia maniero atingi la saman rezulton, pasante la komandon ping rekte kiel argumenton al se:
se ping -c 1 IP-ADRESO; tiam
eoo "Jes, ĝi estas en la reto"
alia
eoo "Ne en la reto"
fi
Kio okazas estas, ke se taksas la redonan valoron de la komando, kiun vi pasigas kiel argumenton, se ĝi redonas 0, ĝi estas vera, ĉio alia estas falsa. La kvadrataj krampoj samvaloras al la testkomando. Sed vi povas pasigi iun ajn komandon kiel argumenton (kondiĉe ke la komando redonas iun valoron).
Saluton, kiel mi ekzekutas script.sh kun uzanto X en la skripto mi kreas uzanton Y, kaj tiu uzanto Y daŭre plenumas la script.sh
Ĉu tio povas esti farita ??
Tre interesa, dankon!
Dankon pro la kontribuo, mi estis horo por kompreni ĝin xD, sed mi komprenis ĝin !!!!.
La skripto bonas. Aritmetike ĝi povus fariĝi ankaŭ kiel ($? == 0) se ĝi egalas al nulo, ĝi ne estas en la reto, alie ĝi estas en la reto. Kaj se ni ankoraŭ volas fari ĝin iom pli interaga, ni povas diri:
echo -n Enigu la IP:
legi ip
ping -c 1 $ ip
Saluton, mi tre novas pri tio, mi provas krei biletan numeron (alfanombran) per legado kaj mi volas, ke se tio, kio estas enirita, havas la ĝustan formaton (ABC-123456), plenumu ordonon "x" kaj mi ne scias kiel fari ĝin, ĉu vi povus helpi min?
eoo "Enigu bileton"
legi -p bileton
se $ bileto = "neniu ideo (formato ABC-123456"); tiam cp file.txt $ bileto; else eoas "Malĝusta formato, reprovu"; legi -p; fi.
Certe ĝi estas terura kaj ili ridas haha, sed kiel mi diris, mi ĵus komencas kun ĉi tio.
Se mi malbone klarigas bonvolu diri al mi kaj mi provas fari pli bone.
Brakumu ĉiujn.
Bonega klarigo, salutojn
Mi iom dubas pri se, alia kaj aliaj.
Mi volas skripton por kontroli ke dosiero ekzistas (unu el protokoloj) kaj se ne, por krei ĝin kaj poste skribi al ĝi. Sed se ĝi ekzistas, mi volas, ke vi nur skribu al ĝi.
Kion mi havas estas:
dato = `dato -R`
#Mi estis provanta varian daton, kiu ne estas ĝisdatigita inter la komenco de a
#proceso kaj finiĝas, foje povas pasi horo kaj la ĝusta tempo ne eliras.
if [-f /home/user/logs/test.log];
tiam
tuŝu /home/uzanto/logs/test.log
alia
echo "$ dato: Ĝisdatigita" >> /home/user/logs/test.log
echo «———————————————-» >> /home/user/logs/test.log
fi
En teorio ĝi devus esti bone, sed la realo estas ke ĝi ne estas ĝisdatigita se la referencita dosiero jam ekzistas
pardonu, mi vidis, ke ĝi ne estis sendita kaj ĝi duobliĝis