Sveiki
Šį kartą aš jums parodysiu, kaip sukurti scenarijų su sąlyga Bash, kuris išverstas yra:
Jei X dalykas, kurį norite atlikti, yra įvykdytas, atliekamas Y veiksmas, jei jis nėra įvykdytas, atliekamas kitas veiksmas.
Paprastas paaiškinimas ne 😀
Kelias minutes galvojau apie pavyzdį, kurį galėčiau naudoti šioje pamokoje, man kilo tokia dilema / problema / situacija:
Mes esame savo įmonės tinkle ir norime sužinoti, ar X kompiuteris yra prijungtas prie tinklo. Tam mes darome a scenarijus ką jis padarys zvimbimas link to kompiuterio ir jei jis yra tinkle (tai yra, jei jis grąžina zvimbimas) mums pasakys, kad TAIP, jis yra tinkle, kitaip (tai yra, jis nėra tinkle) jis mums pasakys, kad jis nėra tinkle.
Kai tai bus padaryta, dabar paaiškinsiu, kaip važiuoti su sąlygomis conditions
Štai kodas:
ping -c 1 DIRECCION-IP
if [ $? -ne 0 ]; then
echo "No está en red"
else
echo "Sí está en red"
fi
Nesijaudinkite, aš jums tai paaiškinsiu išsamiai 😉
zvimbimas yra komanda, kurią naudosime, ir ji mums pasakys, ar tas kompiuteris yra tinkle. Norėdami pasakyti, kurį kompiuterį norime patikrinti, ar jis yra tinkle, ar ne, turime pasikeisti IP ADRESAS akivaizdu, kad norime patikrinti kompiuterio IP adresą.
Kaip matote, aš įdėjau «-c 1 m«, Kuris mums reikalingas. Kai mes pinguojame kompiuterį, šis veiksmas nenutrūksta (pingas), kol nepaspauskite savęs [Ctrl] + [C], todėl įdėti «-c 1 m»Mes jums liepiame atlikti tik vieną patikrinimą (tik vieną bandymą atlikti„ ping “), bet ne daugiau. Tai leis akimirksniu sustoti, tai yra ... jis patikrins, ar kompiuteris yra tinkle tik vieną kartą.
Jei turite abejonių dėl to, neskauda ... jie taip sako ir aš mielai jums tai dar kartą paaiškinsiu 😉
Dabar ateina ciklas, nes tai, ką aš ką tik paaiškinau, yra ne kas kita, kaip įprasta komanda / veiksmas 😀
if [ $? -ne 0 ]; then
echo "No está en red"
else
echo "Sí está en red"
fi
Kad suprastumėte tai, paaiškinsiu itin svarbią Basho detalę 🙂
Labiausiai išmanantys dalykai galėtų mane įvardyti kaip neteisingą ar panašiai, bet, aš, rašau tai naujokams ar mažiau ekspertams, jei tik jie tai supranta
Būna, kad kaip ir Bash tai kažkas panašaus 0 y 1, tai yra, arba tu gyvas, arba miręs, kai vykdoma komanda ar veiksmas: Arba gerai įvykdyta Jokiu problemu (1), Or buvo keletas problema arba klaida (0).
Vykdome X veiksmą ar komandą, o tai, ką padarėme, galėjo būti atlikta gerai arba blogai, gali būti, kad įvyko klaida, ar ne, ir čia yra detalė 😉
Jei tai, ką mes siunčiame daryti (šiuo atveju: ping -c 1 IP adresas) nepadarė klaidos ir tai buvo padaryta gerai, todėl ji grąžins vertę: 1 . Priešingu atveju, ir jei veiksmas (ty pingas) nebuvo sėkmingas, jis grąžins vertę 0.
Ir pagaliau tai, ką reiškia aukščiau pateiktas kodas, yra toks:
Jei tada vertė 0 buvo grąžinta
Rodyti tekstą: «Ne tinkle»
Kitu atveju (ir grąžinkite NE 0, o 1)
Rodyti tekstą: «Jei jis yra tinkle«
Tai, ką aš jums ką tik paaiškinau, ateityje tarnaus daugeliui dalykų, nes tikrai naudinga pasakyti, kad jei X veiksmas davė klaidą, atlikite Y veiksmą ir jei X veiksmas nesuteikė klaida, tegul Z veiksmas.
Žinau, kad kai kurie gali šiek tiek supainioti, todėl bandžiau tai paaiškinti keliais skirtingais būdais, stengdamasis, kad visi vienaip ar kitaip suprastų. Jei kas nors abejoja, praneškite man.
Dabar sukurkime scenarijų 😀
Turime atlikti šios mokymo programos veiksmus: Bashas: Kaip sukurti vykdomąjį scenarijų
Tada nukopijuokime šį kodą į tą failą (scenarijus.sh), o pabaigoje sakykime «išeiti»(Be kabučių):
ping -c 1 DIRECCION-IP
if [ $? -ne 0 ]; then
echo "No está en red"
else
echo "Sí está en red"
fi
Tai turėtų atrodyti taip (nepamirškite, kad turite pakeisti IP-ADDRESS į norimą IP):
Čia galite pamatyti vykdomą scenarijų:
% CODE1%
Kaip matote, galų gale jis mums sako «Taip, jis yra tinkle»🙂
Čia svarbu tai, kad jie iš tikrųjų supranta tai apie sąlygas, todėl palieku jums kitą kodą, kad paaiškintumėte dar kartą, bet kitu požiūriu.
read "texto"
if [ "$texto" = "3" ]; then
echo "Correcto"
else
echo "Incorrecto"
fi
Ką tai reiškia, paprasta, aš palieku paaiškinimą eilutėje po eilutės:
1-oji eilutė: Tai, ką parašysime, bus kintamojo vertė «tekstas»(Be kabučių).
2 eilutė: Patikrinkite, ar kintamojo turinys (ką mes ką tik parašėme) yra 3.
3-oji eilutė: Būties atveju 3, jis mums parodys tekstą «Ištaisyti»(Be kabučių).
4-oji eilutė: Kitu atveju (tai yra tuo atveju, jei mes neparašėme 3).
5-oji eilutė: Tai parodys mums tekstą «Neteisinga»(Be kabučių).
6-oji eilutė: Būklės pabaiga.
Kaip jie sugebėjo suvokti, jei mes sakome praleisti ir tada tarp dvigubų kabučių («) tekstą, tai sukels tą tekstą terminale. Tai yra, jei mes pateikiame:
echo "esto es una prueba"
Tai mums parodys tekstą terminale: čia testas
Bet grįždamas prie šio antrojo pavyzdžio, aš jums parodysiu šio antrojo scenarijaus naudingumą (ir vykdymą) su kažkuo LABAI paprastu 😀 ... tipišku «kiek yra 1 + 2?«
Aš palieku jums viso scenarijaus kodą:
#!/bin/bash
# -*- ENCODING: UTF-8 -*-
echo "¿Cuánto es 1 + 2?"
read "texto"
if [ "$texto" = "3" ]; then
echo "Correcto"
else
echo "Incorrecto"
fi
exit
Štai kaip scenarijus veikia:
% CODE2%
Ir gerai ... nieko daugiau pridėti.
Tai yra kažkas elementaraus, paprasto taip, bet vis tiek bandžiau tai paaiškinti kuo geriau, nes ne visi turi programuotojo sielą, ir daug kartų turime kurti tokius scenarijus (ar panašius), bet kokiu atveju aš tikiuosi, kad šis straipsnis jums bus naudingas 🙂
Prašome palikti bet kokių abejonių, klausimų, skundų ar pasiūlymų, palikite čia, aš mielai jums atsakysiu, taigi, mes visi sužinome šiek tiek daugiau 😀
saludos
Jūs esate profesionalas !!! * arba *
Ne dėl nieko 😀
Jei tai jums tarnavo ir yra įdomu, aš patenkinta 😉
Sveikinimai drauge
@ KZKG ^ Gaara,
kalbant apie bash programavimą, man kyla klausimas:
Koks skirtumas tarp tokio kintamojo paskelbimo kaip VAR = labas ir tokio paskelbimo VAR = $ {VAR:-labas}?
Aš paaiškinu:
http://pastebin.com/a3cfWXeD
sveikinimai 😉
Sveiki
Na, aš visai nesu bash ekspertas ... Tiesą sakant, aš neįsivaizduoju LOL !!
Kai aš skelbiu kintamuosius, jis yra toks:
: ${OPTFOLDER:="/opt/"}
Bet kadangi aš tai dariau visada, aš nežinau, koks skirtumas gali būti sąžiningas 🙁
@ KZKG ^ Gaara
Na, aš uždaviau klausimą, nes tiesa yra ta, kad aš taip pat nežinojau, aš paprastai rašau „SlackBuilds“ ir tiesa ta, kad šiuose scenarijuose gausu kintamųjų, deklaruotų kaip VAR1. Greita „Google“ paieška padėjo man išsiaiškinti šį klausimą, dalinuosi su visais, kad visi galėtume išmokti:
scenarijus:
http://pastebin.com/faAQb35w
Paaiškinimas:
Deklaruojant formos kintamuosius VAR = $ {VAR: -default_value} reiškia, kad kintamasis VAR reikšmę default_value ims tik tada, jei reikšmė yra nulinė arba jos nėra.
Praktinis pavyzdys:
Vykdant scenarijų prašoma įvesti reikšmę, kuri bus saugoma kintamajame VAR, jei kažkas įvedama, tai parodys, kas buvo įvesta. Jei nieko neįvedame ir paspaudžiame „Enter“, skelbiame, kad kintamasis VAR yra nulinis, todėl jis rodo default_value.
Sveikinimai.
HAHA aš to nežinojau 😀
Gerai, labai ačiū draugei ... tai ir turėjau omenyje straipsnio pabaigoje, neketinu kažko mokyti ir tiek, žinau, kad čia visada sužinosiu ką nors naujo 😀
Dar kartą sveikinimai ir padėkos.
tu teisus, čia išmoksi kelių dalykų.
linkėjimai ir gražios šventės !! 😀
Puikus ir puikiai paaiškintas +1, laikas, kurio jums prireiks ...
bet aš verta pastangų 😉
Aš iš tikrųjų parašiau 80% tik per vieną dieną, man užtruko tiek laiko, kol jį paskelbiau vien todėl, kad internetas man to neleido.
Ačiū už jūsų komentarą 😉
Kitas būdas tai padaryti yra DNS naudojimas, nes kartais tinkluose yra užblokuotas ICMP protokolas:
(pagrindinis kompiuteris -ta IP-ADDRESS> / dev / null 2> & 1) && echo "Prisijungta prie tinklo"
Taip pat pastebėsite, kad šiame pavyzdyje grąžinamosios vertės patikrinimas yra netiesioginis 😉
Jūs, kaip visada draugas, su patarimais, kurių aš nepažįstu visiškai HAHAHA.
Ačiū, komentaras vertinamas ir hehe ... dar vienas naujas dalykas, kurį mokausi 😀
Ačiū
????
Nors nuo šios temos paskelbimo praėjo kelios dienos, ji man labai pasitarnavo, dabar, kai sukūriau scenarijų bash .. Ačiū Gaara ..
Dėkojame už pagalbą, kad man viską paaiškinote.
Tiesiog paklausimas, kaip man tai padaryti, kad kai vienas kompiuteris nustoja pinguoti automatiškai, kitas pakeičia IP. Aš turiu tai.
pakeisti IP
#! / bin / bash
ping -c 10 192.168.1.50 #, jei jis nepuola automatiškai
ifconfig eth0 192.168.1.50 „netmask“ 255.255.255.0 transliacija 192.168.1.0
ifconfig eth0 žemyn
ifconfig eth0 up
nes lyginant su klaustuku jei naudojate klaustuką? koks skirtumas tarp dedant? bet kuris kitas laiškas
$? reiškia „ankstesnę išvestį arba išvestį“, tai yra, jei ankstesnės komandos rezultatas ... ...
Yra dar vienas būdas pasiekti tą patį rezultatą, tiesiogiai perduodant komandą ping kaip argumentą, jei:
jei ping -c 1 IP adresas; tada
aidas "Taip, jis yra tinkle"
kitas
aidas „Ne tinkle“
fi
Atsitinka taip: jei įvertinama komandos, kurią perduodate kaip argumentą, grąžinimo vertė, jei ji grąžina 0, tai tiesa, visa kita yra klaidinga. Laužtiniai skliaustai yra lygiaverčiai bandymo komandai. Bet jūs galite perduoti bet kurią komandą kaip argumentą (jei komanda grąžina tam tikrą vertę).
Sveiki, kaip aš galiu vykdyti scenarijų.sh su vartotoju X scenarijuje, kuriame sukūriau vartotoją Y, o tas vartotojas Y toliau vykdo scenarijų.sh
Ar tai galima padaryti ??
Labai įdomu, ačiū!
Ačiū už indėlį, aš jau valandą laiko jį supratau xD, bet aš jį supratau !!!!
Scenarijus yra puikus. Aritmetiniu požiūriu tai taip pat būtų galima padaryti kaip ($? == 0), jei ji lygi nuliui, jos nėra tinkle, kitaip ji yra tinkle. Ir jei mes vis tiek norime padaryti jį šiek tiek interaktyvesnį, galime pasakyti:
echo -n Įveskite IP:
skaityti ip
ping -c 1 $ ip
Sveiki, man tai labai nauja, bandau padaryti bilieto numerį (raidinį ir skaitmeninį) skaitydamas ir noriu, kad jei įvestas būtų teisingo formato (ABC-123456), įvykdykite komandą „x“ ir aš nežinote, kaip tai padaryti, gal galėtumėte man padėti?
aidas „Įveskite bilietą“
skaityti -p bilietą
jei $ bilietas = "nėra idėjos (formatas ABC-123456"); tada cp file.txt $ bilietas; kitaip aidi „netinkamas formatas, bandykite dar kartą“; skaityti -p; fi.
Aišku, kad tai siaubinga, ir jie juokiasi haha, bet, kaip sakiau, aš tik pradedu nuo to.
Jei blogai paaiškinu, pasakykite man ir bandau padaryti geriau.
Apkabink visus.
Puikus paaiškinimas, sveikinimai
Šiek tiek abejoju dėl if, else ir kitų.
Noriu, kad scenarijus patikrintų, ar failas yra (vienas iš žurnalų), o jei ne, jį sukurti ir vėliau į jį įrašyti. Bet jei jis egzistuoja, noriu, kad tiesiog parašytumėte.
Ką aš turiu:
data = "data -R".
#Išbandžiau kintamą datą, kuri neatnaujinama nuo a pradžios
#procesas ir baigiasi, kartais gali praeiti valanda, o teisingas laikas neišeina.
if [-f /home/user/logs/test.log];
tada
palieskite /home/usuario/logs/test.log
kitas
echo "$ data: Atnaujinta" >> /home/user/logs/test.log
echo «———————————————-» >> /home/user/logs/test.log
fi
Teoriškai tai turėtų būti gerai, tačiau realybė yra tokia, kad ji neatnaujinama, jei nurodytas failas jau yra
atsiprašau, pamačiau, kad neišsiųsta ir padvigubėjo