Haló
Tentokrát vám ukážu, jak vytvořit skript s podmínkou v Praštit, což znamená:
Pokud je splněna X věc, kterou chcete, je provedena akce Y, pokud není splněna, provede se další akce.
Jednoduché vysvětlení ne 😀
Nyní jsem několik minut přemýšlel o nějakém příkladu, který bych měl použít v tomto tutoriálu, napadlo mě následující dilema / problém / situace:
Jsme v síti naší společnosti a chceme vědět, jestli je počítač X připojen k síti. Za tímto účelem děláme skript co bude dělat ping k tomuto počítači a pokud je v síti (tj. pokud vrací ping) řekne nám, že ANO, je v síti, jinak (tj. není v síti), řekne nám, že NENÍ v síti.
Jakmile to bude hotové, nyní vysvětlím, jak cyklovat s podmínkami 🙂
Zde je kód:
ping -c 1 DIRECCION-IP
if [ $? -ne 0 ]; then
echo "No está en red"
else
echo "Sí está en red"
fi
Nebojte se, vysvětlím vám to podrobně 😉
ping je příkaz, který použijeme, a řekne nám, zda je tento počítač v síti. Abychom zjistili, který počítač chceme zkontrolovat, zda je či není v síti, musíme to změnit IP ADRESA zjevně IP adresou počítače, který chceme zkontrolovat.
Jak vidíte, dal jsem «-c 1«, Což je pro nás nezbytné. Když provedeme ping na počítač, tato akce se nezastaví (ping), dokud sami nestiskneme [Ctrl] + [C], takže uvedení «-c 1»Říkáme vám, abyste provedli pouze jedno ověření (pouze jeden pokus o ping) a žádné další, tím se okamžitě zastaví, to znamená ... zkontroluje, zda je počítač v síti pouze jednou.
Pokud o tom máte pochybnosti, žádná bolest ... říkají to a já jim to rád znovu vysvětlím 😉
Nyní přichází cyklus, protože to, co jsem právě vysvětlil, není nic jiného než normální příkaz / akce 😀
if [ $? -ne 0 ]; then
echo "No está en red"
else
echo "Sí está en red"
fi
Aby jste tomu porozuměli, vysvětlím nesmírně důležitý detail Bash 🙂
Nejznalější z tohoto oboru by mě mohli označit za špatného nebo něco takového, ale hej, píšu to pro nováčky nebo méně odborníky, pokud tomu rozumí, pak skvělé great
Stává se, že jako v Praštit je to něco jako 0 y 1, tj. buď jste naživu, nebo jste mrtví, když je proveden příkaz nebo akce: Buď provedeno dobře Žádný problém (1), nějaké byly problém nebo chyba (0).
Provádíme akci nebo příkaz X a to, co jsme udělali, mohlo být provedeno dobře nebo špatně, mohlo to mít chybu nebo ne, a to je detail 😉
Pokud to, co pošleme, udělat (v tomto případě: ping -c 1 IP ADRESA) nedal chybu a byl úspěšný, takže vrátí hodnotu: 1 . Jinak a pokud akce (tj. Ping) nebyla úspěšná, vrátí hodnotu 0.
A konečně, co výše uvedený kód znamená, je toto:
Pokud byla vrácena hodnota 0
Zobrazit text: «Není v síti»
Jinak (a vrátit NOT 0, ale 1)
Zobrazit text: «Pokud je v síti«
To, co jsem vám právě vysvětlil, nám v budoucnu poslouží k mnoha věcem, protože je opravdu užitečné mít možnost říci, že pokud akce X udělala chybu, proveďte akci Y a v případě, že akce X nedala chybu, nechte akci Z.
Vím, že by se někteří mohli trochu zapojit, a tak jsem se snažil vysvětlit to několika různými způsoby a snažit se, aby to každý pochopil tak či onak. V případě, že někdo zůstane na pochybách, dejte mi vědět.
Nyní vytvořme náš skript 😀
Musíme postupovat podle kroků v tomto tutoriálu: Bash: Jak vytvořit spustitelný skript
Pak zkopírujeme následující kód do tohoto souboru (skript.sh), a na konci řekněme «výstup»(Bez uvozovek):
ping -c 1 DIRECCION-IP
if [ $? -ne 0 ]; then
echo "No está en red"
else
echo "Sí está en red"
fi
Mělo by to vypadat takto (nezapomeňte, že museli změnit IP-ADDRESS na IP, kterou chtějí):
Zde vidíte spuštěný skript:
% CODE1%
Jak vidíte, nakonec nám říká «Ano, je v síti»🙂
Důležité je zde to, že tomu skutečně rozumějí, takže vám nechám další kód, který to vysvětlí znovu, ale z jiného úhlu pohledu.
read "texto"
if [ "$texto" = "3" ]; then
echo "Correcto"
else
echo "Incorrecto"
fi
Co to znamená, je jednoduché, nechávám vysvětlení řádek po řádku:
1. řádek: To, co napíšeme, bude hodnota proměnné «text»(Bez uvozovek).
2. řádek: Zkontrolujte, zda je obsah proměnné (co jsme právě napsali) 3.
3. řádek: V případě bytí 3, zobrazí se nám text «Opravte»(Bez uvozovek).
4. řádek: Jinak (tj. Pokud jsme nenapsali 3).
5. řádek: Ukáže nám text «Nesprávný»(Bez uvozovek).
6. řádek: Konec podmínky.
Jak si dokázali uvědomit, pokud to řekneme minout a pak mezi uvozovkami («) text, způsobí to zobrazení tohoto textu v terminálu. To znamená, pokud dáme:
echo "esto es una prueba"
Ukáže nám text v terminálu: tohle je zkouška
Ale když se vrátím k tomuto druhému příkladu, ukážu vám užitečnost (a provedení) tohoto druhého skriptu něčím VELMI jednoduchým 😀 ... typickým «kolik je 1 + 2?«
Nechávám kód celého skriptu:
#!/bin/bash
# -*- ENCODING: UTF-8 -*-
echo "¿Cuánto es 1 + 2?"
read "texto"
if [ "$texto" = "3" ]; then
echo "Correcto"
else
echo "Incorrecto"
fi
exit
Skript funguje takto:
% CODE2%
A dobře ... nic dalšího k tomu.
To je něco elementárního, jednoduché ano, ale přesto jsem se to snažil co nejlépe vysvětlit, protože ne každý má duši programátora a mnohokrát musíme vytvořit takové skripty (nebo podobné), každopádně doufám, že vám tento článek bude užitečný někdo 🙂
Jakékoli pochybnosti nebo dotazy, stížnosti nebo návrhy, prosím, nechte zde, rád vám odpovím, a tak se všichni dozvídáme trochu víc 😀
pozdravy
Jste profesionál !!! *nebo*
Ne za nic 😀
Pokud vám to sloužilo a je to zajímavé, jsem spokojený 😉
Zdravím přítele
@ KZKG ^ Gaara,
Když už mluvíme o bash programování, mám otázku:
Jaký je rozdíl mezi deklarováním proměnné jako je tato VAR = ahoj a deklarováním této proměnné VAR = $ {VAR: -hello}?
Vysvětluji:
http://pastebin.com/a3cfWXeD
pozdravy 😉
Haló
No, nejsem vůbec expert na bash ... vlastně nemám tušení LOL !!
Jak deklaruji proměnné, je to takto:
: ${OPTFOLDER:="/opt/"}
Ale protože jsem to vždycky dělal takhle, nevím, jaký by mohl být rozdíl upřímně 🙁
@ KZKG ^ Gaara
Položil jsem otázku, protože pravdou je, že ani já jsem to nevěděl, obvykle píšu SlackBuilds a pravdou je, že proměnných deklarovaných jako ve VAR1 je v těchto skriptech spousta. Rychlé vyhledávání google mi pomohlo tuto otázku objasnit, sdílím ji se všemi, abychom se mohli všichni naučit:
Skript:
http://pastebin.com/faAQb35w
Vysvětlení:
Deklarace proměnných ve tvaru VAR = $ {VAR: -default_value} znamená, že proměnná VAR bude mít hodnotu default_value právě tehdy, pokud má hodnotu null nebo neexistuje.
Praktický příklad:
Při provádění skriptu je požadováno zadání hodnoty, která má být uložena do proměnné VAR, pokud je něco zadáno, ukáže, co bylo zadáno. Pokud nic nezadáme a stiskneme klávesu Enter, deklarujeme proměnnou VAR jako null, proto ukazuje value_default.
Zdravím.
HAHA, to jsem nevěděl 😀
Dobře, děkuji moc příteli ... to jsem měl na mysli na konci článku, nemám v úmyslu něco učit a to je vše, vím, že se zde vždy naučím něco nového 😀
Zdravím a ještě jednou děkuji.
Máte pravdu, člověk se zde dozví několik věcí.
pozdravy a šťastné svátky !! 😀
Úžasné a skvěle vysvětlené +1, čas, který vám zabere ...
ale za tu námahu stojím 😉
Vlastně jsem napsal 80% za pouhý 1 den, jeho zveřejnění mi trvalo tak dlouho jen proto, že mi to internet nedovolil.
Děkujeme za váš komentář 😉
Další způsob, jak to udělat, je použití DNS, protože někdy mají sítě zablokovaný protokol ICMP:
(host -ta IP-ADDRESS> / dev / null 2> & 1) && echo "Připojeno k síti"
Také si všimnete, že v tomto příkladu je kontrola návratové hodnoty implicitní 😉
Vy jako vždy přítel, s tipy, které úplně neznám HAHAHA.
Děkuji, komentář je oceněn a hehe ... další nová věc, kterou se naučím 😀
díky
????
I když od vydání tohoto tématu uplynulo několik dní, hodně mi to posloužilo, když jsem nyní vytvořil scénář v bash .. Díky Gaara ..
Doc. Děkuji za pomoc, kterou jste mi objasnili.
Jen dotaz, jak to mám udělat, že když jeden počítač přestane pingovat automaticky, druhý změní IP. Mám tohle.
změnit IP
#! / bin / bash
ping -c 10 192.168.1.50 # pokud nepinguje automaticky
ifconfig eth0 192.168.1.50 maska sítě 255.255.255.0 vysílání 192.168.1.0
ifconfig eth0 dolů
ifconfig eth0 nahoru
protože při srovnání s pokud používáte otazník? jaký je rozdíl mezi uvedením? jakýkoli jiný dopis
$? znamená „předchozí výstup“, tj. v případě, že je výsledkem předchozího příkazu ... 🙂
Existuje jiný způsob, jak dosáhnout stejného výsledku, předat příkaz ping přímo jako argument, pokud:
pokud ping -c 1 IP ADRESA; pak
echo "Ano, je to na internetu"
jiný
echo "Není v síti"
fi
Co se stane, je to, že pokud se vyhodnotí návratová hodnota příkazu, který předáte jako argument, pokud vrátí 0, je to pravda, všechno ostatní je nepravdivé. Hranaté závorky jsou ekvivalentní příkazu test. Jakýkoli příkaz však můžete předat jako argument (pokud příkaz vrátí nějakou hodnotu).
Dobrý den, jak provedu script.sh s uživatelem X ve skriptu, vytvořím uživatele Y a tento uživatel Y pokračuje ve spouštění script.sh
Lze to udělat ??
Velmi zajímavé, díky!
Díky za příspěvek, byl jsem hodinu, abych to pochopil xD, ale pochopil jsem to !!!!.
Skript je v pořádku. Aritmeticky by to mohlo být také provedeno jako ($? == 0), pokud je rovno nule, není v síti, jinak je v síti. A pokud to chceme ještě trochu udělat interaktivnější, můžeme říci:
echo -n Zadejte IP:
číst ip
ping -c 1 $ ip
Dobrý den, jsem v tom velmi nový, snažím se vytvořit číslo lístku (alfanumerické) prostřednictvím čtení a chci, aby pokud zadané slovo má správný formát (ABC-123456), provedlo příkaz "x" a já nevím, jak to udělat, mohl byste mi pomoci?
echo "Zadejte lístek"
číst -p lístek
if $ ticket = "no idea (formát ABC-123456"); pak cp file.txt $ ticket; else echo "Chybný formát, zkuste to znovu"; read -p; fi.
Jistě, je to hrozné a smějí se, haha, ale jak jsem řekl, s tím teprve začínám.
Pokud vysvětlím špatně, řekněte mi to a snažím se dělat lépe.
Obejměte každého.
Skvělé vysvětlení, pozdravy
Trochu pochybuji s if, else a dalšími.
Chci skript, který zkontroluje, zda soubor existuje (jeden z protokolů), a pokud ne, aby jej vytvořil a později do něj zapsal. Ale pokud existuje, chci, abys mu napsal.
Co mám je:
datum = `datum -R`
#Testoval jsem proměnné datum, které se mezi začátkem a
#process and ends, někdy může uplynout hodina a nevyjde správný čas.
if [-f /home/user/logs/test.log];
pak
dotkněte se /home/usuario/logs/test.log
jiný
echo "$ datum: Aktualizováno" >> /home/user/logs/test.log
echo «———————————————-» >> /home/user/logs/test.log
fi
Teoreticky by to mělo být v pořádku, ale realita je taková, že se neaktualizuje, pokud již odkazovaný soubor existuje
omlouvám se, viděl jsem, že nebylo odesláno a zdvojnásobilo se