Bok
Ovaj put ću vam pokazati kako napraviti skriptu sa uvjetom u Tresnuti, što je prevedeno:
Ako je X stvar koju želite ostvarena, izvršava se Y akcija, ako se ne postigne, poduzima se druga radnja.
Jednostavno objašnjenje br
Sad sam nekoliko minuta razmišljao o nekom primjeru koji bih koristio u ovom vodiču, pao mi je na pamet sljedeća dilema / problem / situacija:
Nalazimo se na mreži naše tvrtke i želimo znati je li X računalo povezano s mrežom. Za to izrađujemo rukopis što će učiniti ping prema tom računalu i ako je na mreži (to jest, ako vrati ping) će nam reći da DA, nalazi se na mreži, inače (to jest, nije na mreži) reći će nam da NIJE na mreži.
Kad se to učini, sada ću objasniti kako se vozi s uvjetima 🙂
Evo koda:
ping -c 1 DIRECCION-IP
if [ $? -ne 0 ]; then
echo "No está en red"
else
echo "Sí está en red"
fi
Ne brinite, objasnit ću vam ovo detaljno 😉
ping je naredba koju ćemo koristiti i ona će nam reći je li to računalo na mreži. Da bismo znali koje računalo želimo provjeriti nalazi li se na mreži ili ne, moramo se promijeniti IP ADRESA očito IP adresom računala koje želimo provjeriti.
Kao što vidite, stavio sam «-c 1«, Što nam je neophodno. Kad pingamo računalo, ova radnja ne prestaje (ping) dok se ne pritisnemo [Ctrl] + [C], pa stavljajući «-c 1»Kažemo mu da izvrši samo jednu provjeru (samo jedan pokušaj pinga) i nijednu drugu, to će ga odmah zaustaviti, odnosno ... provjerit će je li računalo na mreži samo jednom.
Ako sumnjate u ovo, nema boli ... oni to kažu i ja ću im opet objasniti 😉
Sada dolazi ciklus, jer ono što sam upravo objasnio nije ništa drugo nego normalna naredba / radnja 😀
if [ $? -ne 0 ]; then
echo "No está en red"
else
echo "Sí está en red"
fi
Da biste to razumjeli, objasnit ću vam izuzetno važan detalj Basha 🙂
Najupućeniji u toj temi mogli bi me označiti kao pogrešnog ili slično, ali hej, ovo pišem za početnike ili manje stručnjake, sve dok oni to sjajno razumiju
Dogodi se da kao u Tresnuti to je nešto poput 0 y 1, to jest, ili ste živi ili ste mrtvi, kada se izvrši naredba ili radnja: Ili dobro izvršena Nema problema (1) bilo ih je problem ili pogreška (0).
Izvršavamo X radnju ili zapovijed, a ono što smo učinili moglo je biti izvedeno dobro ili loše, možda je došlo do pogreške ili ne, a ovdje je detalj 😉
Ako ono što pošaljemo učiniti (u ovom slučaju: ping -c 1 IP-ADRESA) nije dao pogrešku i bio je uspješan, pa će vratiti vrijednost: 1 . Inače, i ako radnja (odnosno ping) nije bila uspješna, vratit će vrijednost 0.
I na kraju, što znači gornji kod:
Ako je tada vraćena vrijednost 0
Prikaži tekst: «Nije na mreži»
Inače (i vratite NE 0, već 1)
Prikaži tekst: «Ako je u mreži«
Ovo što sam vam upravo objasnio, poslužit će nam u budućnosti za mnoge stvari, jer je zaista korisno moći reći da ako je X akcija dala pogrešku, učinite Y akciju, a u slučaju da X akcija nije dala pogreška, a zatim učinite Z akciju.
Znam da bi se neki mogli malo zbuniti, pa sam to pokušao objasniti na nekoliko različitih načina, pokušavajući učiniti da svi to shvate na ovaj ili onaj način. U slučaju da netko ostane u nedoumici, javite mi.
Sada, napravimo našu skriptu 😀
Moramo slijediti korake u ovom vodiču: Bash: Kako napraviti izvršnu skriptu
Onda kopirajmo sljedeći kod u tu datoteku (skripta.š), a na kraju recimo «izlaz»(Bez navodnika):
ping -c 1 DIRECCION-IP
if [ $? -ne 0 ]; then
echo "No está en red"
else
echo "Sí está en red"
fi
To bi trebalo izgledati ovako (imajte na umu da ste sigurno promijenili IP-ADRESU u IP koji želite):
Ovdje možete vidjeti pokrenutu skriptu:
% CODE1%
Kao što vidite, na kraju nam kaže «Da, u mreži je»🙂
Ovdje je najvažnije da oni zapravo to razumiju u vezi s uvjetima, pa vam ostavljam još jedan kôd da to ponovo objasnite, ali s druge točke gledišta.
read "texto"
if [ "$texto" = "3" ]; then
echo "Correcto"
else
echo "Incorrecto"
fi
Što ovo znači jednostavno, obrazloženje ostavljam red po red:
1. redak: Ono što napišemo, to će biti vrijednost varijable «tekst»(Bez navodnika).
2. redak: Provjerite je li sadržaj varijable (ono što smo upravo napisali) 3.
3. redak: U slučaju da je 3, pokazat će nam tekst «pravo»(Bez navodnika).
4. redak: Inače (to jest, u slučaju da nismo napisali 3).
5. redak: Pokazat će nam tekst «Netočno»(Bez navodnika).
6. redak: Kraj stanja.
Kao što su uspjeli shvatiti, ako stavimo odjek a zatim između dvostrukih navodnika («) tekst, to će uzrokovati prikaz tog teksta u terminalu. Odnosno, ako stavimo:
echo "esto es una prueba"
Pokazat će nam tekst u terminalu: ovo je test
No, vraćajući se na ovaj drugi primjer, pokazat ću vam korisnost (i izvršenje) ove druge skripte nečim VRLO jednostavnim 😀 ... tipičnim «koliko je 1 + 2?«
Ostavljam vam kod kompletne skripte:
#!/bin/bash
# -*- ENCODING: UTF-8 -*-
echo "¿Cuánto es 1 + 2?"
read "texto"
if [ "$texto" = "3" ]; then
echo "Correcto"
else
echo "Incorrecto"
fi
exit
Evo kako skripta djeluje:
% CODE2%
I dobro ... ništa više za dodati.
Ovo je nešto elementarno, jednostavno da, ali ipak sam pokušao to objasniti što je bolje moguće, jer nemaju svi dušu programera, i puno puta moramo napraviti skripte poput ovih (ili sličnih), u svakom slučaju ja nadam se da će vam ovaj članak netko biti koristan 🙂
Svaka sumnja ili pitanje, žalba ili prijedlog, ostavite ovdje, rado ću vam odgovoriti, a mi ćemo svi naučiti malo više 😀
pozdravi
Vi ste profesionalac !!! *ili*
Ma ne za ništa 😀
Ako vam je poslužilo i zanimljivo je, zadovoljan sam 😉
Pozdrav prijatelju
@ KZKG ^ Gaara,
kad smo već kod bash programiranja, imam pitanje:
Koja je razlika između deklariranja varijable poput ove VAR = hello i deklariranja ovako VAR = $ {VAR: -hello}?
Ja objašnjavam:
http://pastebin.com/a3cfWXeD
pozdrav 😉
Bok
Pa, ja uopće nisam stručnjak za bash ... zapravo, nemam pojma LOL !!
Dok deklariram varijable, to je ovako:
: ${OPTFOLDER:="/opt/"}
Ali budući da sam to uvijek radio ovako, ne znam koja bi razlika mogla biti iskreno 🙁
@ KZKG ^ Gaara
Pa, postavio sam pitanje jer istina je da ni ja nisam znao, obično pišem SlackBuilds, a istina je da varijabli deklarirane kao u VAR1 obiluju tim skriptama. Brzo google pretraživanje pomoglo mi je razjasniti ovo pitanje, dijelim ga sa svima kako bismo svi mogli naučiti:
skripta:
http://pastebin.com/faAQb35w
Obrazloženje:
Deklariranje varijabli oblika VAR = $ {VAR: -default_value} znači da će varijabla VAR uzeti vrijednost default_value ako i samo ako je vrijednost null ili ne postoji.
Praktični primjer:
prilikom izvršavanja skripte traži da unese vrijednost koja će se pohraniti u varijablu VAR, ako se nešto unese, pokazat će što je uneseno. Ako ništa ne unesemo i pritisnemo enter, proglašavamo varijablu VAR nulom, stoga pokazuje value_default.
Pozdrav.
HAHA to nisam znao 😀
Ok, hvala ti puno prijatelju ... na to sam mislio na kraju članka, ne namjeravam nešto podučavati i to je to, znam da ću ovdje uvijek naučiti nešto novo 😀
Još jednom pozdrav i hvala.
u pravu si, ovdje se nauči nekoliko stvari.
pozdrav i sretni praznici !! 😀
Sjajno i izvrsno objašnjeno +1, vrijeme koje će vam trebati ...
ali vrijedan sam truda 😉
Zapravo sam napisao 80% u samo jedan dan, trebalo mi je toliko vremena da ga objavim samo zato što mi Internet nije dopustio.
Hvala na komentaru 😉
Drugi način za to je korištenje DNS-a, jer ponekad mreže imaju blokiran ICMP protokol:
(host -ta IP-ADRESA> / dev / null 2> & 1) && echo "Povezano s mrežom"
Također ćete primijetiti da je u ovom primjeru provjera povratne vrijednosti implicitna 😉
Ti kao i uvijek prijatelj, sa savjetima koje ne znam u potpunosti HAHAHA.
Hvala, komentar je cijenjen i hehe ... još jedna nova stvar koju naučim 😀
hvala
????
Iako je prošlo nekoliko dana od objavljivanja ove teme, poslužilo mi je puno, sad kad sam napravio skriptu na bashu .. Hvala Gaara ..
Doc. Hvala na pomoći što si mi pojasnio stvari.
Samo upit, kako da to učinim da, kada jedno računalo automatski prestane pingirati, drugo promijeni IP. Ja imam ovo.
za promjenu IP-a
#! / bin / bash
ping -c 10 192.168.1.50 # Ako se ne pinguje automatski
ifconfig eth0 192.168.1.50 mrežna maska 255.255.255.0 emitirana 192.168.1.0
ifconfig eth0 dolje
ifconfig eth0 gore
jer kad se uspoređuje s if ako koristite upitnik? koja je razlika između stavljanja? bilo koje drugo slovo
$? znači "prethodni izlaz ili izlaz", odnosno u slučaju da je rezultat prethodne naredbe ... 🙂
Postoji još jedan način za postizanje istog rezultata, prosljeđivanje naredbe ping izravno kao argument ako:
ako ping -c 1 IP-ADRESA; zatim
odjek "Da, na mreži je"
drugo
odjek "Nije na mreži"
fi
Ono što se događa je da ako procijeni povratnu vrijednost naredbe koju proslijedite kao argument, ako vrati 0, istina je, bilo što drugo je lažno. Uglate zagrade jednake su test naredbi. Ali bilo koju naredbu možete proslijediti kao argument (sve dok naredba vraća neku vrijednost).
Pozdrav, kako izvršiti script.sh s korisnikom X u skripti kreiram korisnika Y, a taj korisnik Y nastavlja izvršavati script.sh
Može li se to ??
Vrlo zanimljivo, hvala!
Hvala na doprinosu, imam sat vremena da to shvatim xD, ali razumio sam !!!!.
Scenarij je u redu. Aritmetički bi se to moglo učiniti i kao ($? == 0) ako je jednako nuli i nije na mreži, inače je na mreži. A ako to ipak želimo učiniti malo interaktivnijim, možemo reći:
echo -n Unesite IP:
čitati ip
ping -c 1 $ ip
Pozdrav, vrlo sam nov u ovome, pokušavam napraviti broj ulaznice (alfanumerički) kroz očitanje i želim da ako ono što se unese ima ispravan format (ABC-123456) izvršim naredbu "x" i ne razumijem ne znam kako to učiniti, možete li mi pomoći?
odjek "Unesite kartu"
čitaj -p ulaznica
if $ ticket = "nema ideje (format ABC-123456"); zatim cp file.txt $ ulaznica; inače odjekuje "pogrešan format, pokušaj ponovno"; čitati -p; fi.
Naravno da je užasno i smiju se haha, ali kao što rekoh, tek počinjem s ovim.
Ako loše objasnim, recite mi i trudim se biti bolji.
Zagrli sve.
Izvrsno objašnjenje, pozdrav
Malo sumnjam u if, else i druge.
Želim skriptu za provjeru postojanja datoteke (jedan od dnevnika), a ako ne, za stvaranje i kasnije pisanje u nju. Ali ako postoji, želim da mu samo napišete.
Ono što imam je:
datum = `datum -R`
#Testirao sam varijabilni datum, koji se ne ažurira između početka a
#proces i završi, ponekad može proći sat vremena, a točno vrijeme ne izađe.
ako [-f /home/user/logs/test.log];
tada
dodirnite /home/usuario/logs/test.log
drugo
echo "$ datum: ažurirano" >> /home/user/logs/test.log
echo «———————————————-» >> /home/user/logs/test.log
fi
U teoriji bi trebalo biti u redu, ali stvarnost je da se ne ažurira ako referencirana datoteka već postoji
oprosti, vidio sam da nije poslan i udvostručio se