Pozdrav 😀
Ovaj put ću vam pokazati kako napraviti skriptu sa uvjetom u bash, što je prevedeno:
Ako je X stvar koju želite ostvarena, izvršava se Y akcija, ako se ne postigne, tada se vrši druga akcija.
Jednostavno objašnjenje br
Sada sam nekoliko minuta razmišljao o nekom primjeru koji bih koristio u ovom vodiču, palila mi je na pamet sljedeća dilema / problem / situacija:
Nalazimo se na mreži naše kompanije i želimo znati da li je X računar povezan na mrežu. Za ovo pravimo skripta šta će on učiniti ping prema tom računaru 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.
Nakon što 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, detaljno ću vam objasniti 😉
ping je naredba koju ćemo koristiti i ona će nam reći da li je taj računar na mreži. Da bismo vam rekli koji PC želimo provjeriti je li na mreži ili nije, moramo se promijeniti IP ADRESA očigledno, IP adresa računara koju želimo provjeriti.
Kao što vidite, stavio sam «-c 1«, Što nam je neophodno. Kada pingamo računalo, ova radnja se ne zaustavlja (ping) dok se ne pritisnemo [Ctrl] + [C], pa stavljajući «-c 1»Kažemo vam da napravite samo jednu provjeru (samo jedan pokušaj pinga) i nijednu drugu, to će ga odmah zaustaviti, odnosno ... samo jednom provjerit će je li računar na mreži.
Ako sumnjate u ovo, nema bolova ... oni to kažu i rado ću vam to ponovo 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 razumiju, onda veliki genijalac
Dešava se da kao u bash 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šeno Nema problema (1), ili bilo ih je problem ili greška (0).
Izvodimo 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 šaljemo da radimo (u ovom slučaju: ping -c 1 IP-ADRESA) nije dao grešku i bio je uspješan, pa će vratiti vrijednost: 1 . Inače, i ako akcija (to jest, ping) nije bila uspješna, vratit će vrijednost 0.
I na kraju, ono što gornji kod znači je ovo:
Ako je tada vraćena vrijednost 0
Prikaži tekst: «Nije na mreži»
Inače (i NE 0, ali 1 se vraća)
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 grešku, napravite Y akciju, a u slučaju da X akcija nije dala grešku, pustite Z akciju.
Znam da bi se neki mogli malo zbuniti, pa sam pokušao to 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 neko 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 (script.sh), 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 razumiju ove uvjete, 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, ostavljam objašnjenje red po red:
1. red: Ono što napišemo, to će biti vrijednost varijable «tekst»(Bez navodnika).
2. red: Provjerite je li sadržaj varijable (ono što smo upravo napisali) 3.
3. red: U slučaju da postoji 3, pokazat će nam tekst «Correcto»(Bez navodnika).
4. red: Inače (to jest, u slučaju da nismo napisali 3).
5. red: Pokazat će nam tekst «Netacno»(Bez navodnika).
6. red: Kraj stanja.
Kako su mogli shvatiti, ako smo stavili odjek a zatim između dvostrukih navodnika («) tekst, to će dovesti do toga da se taj tekst prikaže na 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 s nečim VRLO jednostavnim 😀 ... tipičnim «koliko je 1 + 2?«
Ostavljam 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 radi:
% 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 mnogo 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, molimo vas, ostavite ovdje, rado ću vam odgovoriti, a mi ćemo svi naučiti malo više 😀
Saludos
Vi ste profesionalac !!! * ili *
Ma ne za ništa nothing
Ako vam je poslužilo i zanimljivo je, zadovoljan sam 😉
Pozdrav prijatelju
@ KZKG ^ Gaara,
kad smo kod bash programiranja, imam pitanje:
Koja je razlika između deklarisanja varijable poput ove VAR = hello i deklariranja ovako VAR = $ {VAR: -hello}?
Objašnjavam:
http://pastebin.com/a3cfWXeD
pozdrav 😉
Pozdrav 😀
Pa, ja uopće nisam stručnjak za bash ... zapravo, nemam pojma LOL !!
Dok deklarišem varijable, to je ovako:
: ${OPTFOLDER:="/opt/"}
Ali budući da sam to uvijek radio ovako, ne znam koja bi razlika mogla biti iskreno honest
@ KZKG ^ Gaara
Pa, postavio sam pitanje jer istina je da ni ja nisam znao, obično pišem SlackBuilds i istina je da varijabli deklarisane kao u VAR1 obiluju tim skriptama. Brzo google pretraživanje pomoglo mi je da razjasnim ovo pitanje, dijelim ga sa svima kako bismo svi mogli naučiti:
Skripta:
http://pastebin.com/faAQb35w
Objašnjenje:
Deklarirajte varijable 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 se da unese vrijednost koja će se pohraniti u VAR varijablu, ako se nešto unese, pokazat će što je uneseno. Ako ne unesemo ništa i pritisnemo enter, proglašavamo varijablu VAR nulom, stoga prikazuje value_default.
Pozdrav.
HAHA Nisam to znao 😀
Ok, puno hvala prijatelju ... 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% za 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 na mrežu"
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 zahvalan i hehe ... još jedna nova stvar koju naučim 😀
hvala
🙂
Iako je prošlo nekoliko dana od objavljivanja ove teme, mnogo mi je poslužilo, sad kad sam napravio skriptu na bashu .. Hvala Gaara ..
Doktore, hvala na pomoći koju ste mi pojasnili.
Samo upit, kako da to učinim da kada jedan računar automatski prestane pingati, drugi promijeni IP. 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 up
jer kada se upoređuje sa if ako koristite upitnik? koja je razlika između stavljanja? bilo koje drugo pismo
$? znači 'prethodni izlaz ili izlaz', to jest, u slučaju da je rezultat prethodne naredbe ... 🙂
Postoji još jedan način da se postigne isti rezultat, predajući naredbu ping izravno kao argument ako:
ako ping -c 1 IP-ADRESA; onda
odjek "Da, na mreži je"
drugo
echo "Nije na mreži"
fi
Ono što se događa je da ako procijeni povratnu vrijednost naredbe koju proslijedite kao argument, ako vrati 0, tačno je, bilo što drugo je netačno. Uglate zagrade ekvivalentne su test naredbi. Ali bilo koju naredbu možete proslijediti kao argument (sve dok naredba vraća neku vrijednost).
Pozdrav, kako da izvršim script.sh s korisnikom X u skripti kreiram korisnika Y, a taj korisnik Y nastavlja s izvršavanjem script.sh
Može li se to učiniti ??
Vrlo zanimljivo, hvala!
Hvala na doprinosu, imao sam sat vremena da to razumem xD, ali shvatio sam !!!!.
Scenarij je u redu. Aritmetički se to može 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:
pročitajte ip
ping -c 1 $ ip
Pozdrav, ja sam vrlo nov u ovome, pokušavam napraviti broj ulaznice (alfanumerički) kroz čitanje i želim da ako ono što se unese ima ispravan format (ABC-123456) izvršim naredbu "x" i ne znam kako to da radim, možete li mi pomoći?
odjek "Unesite kartu"
read -p tiket
ako je $ ulaznica = "nema ideje (format ABC-123456"); zatim cp file.txt $ ulaznica; else echo "Pogrešan format, pokušaj ponovo"; read -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 da to bude bolje.
Zagrli sve.
Izvrsno objašnjenje, pozdrav
Malo sumnjam u if, else i druge.
Želim skriptu koja će provjeriti postoji li datoteka (jedan od dnevnika) i ako ne, da je kreiram i kasnije upišem 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 tačno vrijeme ne izađe.
ako [-f /home/user/logs/test.log];
onda
dodirnite /home/usuario/logs/test.log
drugo
echo "$ datum: Ažurirano" >> /home/user/logs/test.log
eho «———————————————-» >> /home/user/logs/test.log
fi
U teoriji bi trebalo biti u redu, ali realnost je da se ne ažurira ako referencirana datoteka već postoji
izvini, vidio sam da nije poslano i udvostručio se