Helló
Ezúttal megmutatom, hogyan készítsünk egy parancsfeltételt feltételekkel Bashfordítás:
Ha X kívánt dolog megvalósul, akkor Y művelet történik, ha nem teljesül, akkor egy másik műveletet hajt végre.
Egyszerű magyarázat nem 😀
Néhány percig gondoltam néhány példára, amelyet ebben az oktatóanyagban használhatnék, a következő dilemma / probléma / helyzet merült fel bennem:
Cégünk hálózatán vagyunk, és szeretnénk tudni, hogy X számítógép csatlakozik-e a hálózathoz. Ehhez a forgatókönyv mit fog tenni fütyülés a számítógép felé, és ha hálózaton van (vagyis ha visszaadja a fütyülés) azt mondja nekünk, hogy IGEN, a hálózaton van, különben (vagyis nincs a hálózaton) azt fogja mondani, hogy NEM a hálózaton van.
Miután ez megtörtént, most elmagyarázom, hogyan kell ciklust folytatni a feltételekkel
Itt van a kód:
ping -c 1 DIRECCION-IP
if [ $? -ne 0 ]; then
echo "No está en red"
else
echo "Sí está en red"
fi
Ne aggódj, ezt részletesen elmagyarázom neked 😉
fütyülés az a parancs, amelyet használni fogunk, és megmondja, hogy a számítógép csatlakozik-e a hálózathoz. Meg kell változtatnunk, hogy megtudjuk, melyik számítógépet akarjuk ellenőrizni, hogy a hálózaton van-e vagy sem IP-CÍM nyilvánvalóan az ellenőrizni kívánt számítógép IP-címével.
Amint láthatja, betettem «-c 1«, Ami szükséges nekünk. Amikor pingelünk egy számítógépet, ez a művelet nem áll le (a ping), amíg meg nem nyomjuk magunkat [Ctrl] + [C], szóval «-c 1»Azt mondjuk, hogy csak egy ellenőrzést hajtson végre (csak egy ping-kísérletet), és semmit sem, ezzel azonnal leáll, vagyis ... csak egyszer ellenőrzi, hogy a számítógép csatlakozik-e a hálózathoz.
Ha kétségei vannak ezzel kapcsolatban, nincs fájdalom ... ők ezt mondják, és szívesen elmagyarázom még egyszer 😉
Most jön a ciklus, mert amit most elmagyaráztam, nem más, mint egy normál parancs / művelet 😀
if [ $? -ne 0 ]; then
echo "No está en red"
else
echo "Sí está en red"
fi
Annak érdekében, hogy megértse ezt, elmagyarázom a Bash rendkívül fontos részletét
A témában a legismertebbek tévedésnek vagy ilyesminek minősíthetnek, de hé, ezt kezdőknek vagy kevésbé szakértőknek írom, mindaddig, amíg megértik, akkor remek 😉
Előfordul, hogy mint a Bash valami olyasmi 0 y 1, vagyis vagy élsz, vagy halott vagy, amikor egy parancs vagy művelet végrehajtásra kerül: Bármelyik jól kivégezték Nincs mit (1), A volt néhány probléma vagy hiba (0).
X műveletet vagy parancsot hajtunk végre, és amit tettünk, azt jól vagy rosszul hajtottuk végre, lehet, hogy hibája volt, vagy sem, és itt van a részlet 😉
Ha mit küldünk tenni (ebben az esetben: ping -c 1 IP-CÍM) nem adott hibát, és jól sikerült, így visszaadja az értéket: 1 . Ellenkező esetben, és ha a művelet (vagyis a ping) nem volt sikeres, akkor visszaadja az értéket 0.
És végül, mit jelent a fenti kód:
Ha a 0 értéket adta vissza, akkor
A következő szöveg megjelenítése: «Nem a hálózaton»
Ellenkező esetben (és adja vissza NEM 0, hanem 1)
A következő szöveg megjelenítése: «Ha hálózatban van«
Ez, amit most elmagyaráztam nektek, sok mindenre szolgál a jövőben, mert nagyon hasznos azt mondani, hogy ha az X művelet hibát adott, akkor végezzen Y műveletet, és abban az esetben, ha az X művelet nem adott hibát, hagyja, hogy Z cselekedjen.
Tudom, hogy egyesek kissé összezavarodhatnak, ezért megpróbáltam többféleképpen elmagyarázni, és igyekeztem mindenkit így vagy úgy megérteni. Abban az esetben, ha bárki kétségbe merülne, tudassa velem.
Most készítsük el a szkriptünket 😀
Kövessük az oktatóanyag lépéseit: Bash: Futtatható parancsfájl készítése
Akkor másoljuk a következő kódot abba a fájlba (script.sh), és mondjuk a végén «kijárat»(Idézőjelek nélkül):
ping -c 1 DIRECCION-IP
if [ $? -ne 0 ]; then
echo "No está en red"
else
echo "Sí está en red"
fi
Így kell kinéznie (ne felejtsük el, hogy biztosan megváltoztatták az IP-CÍMET a kívánt IP-re):
Itt láthatja a futó szkriptet:
% CODE1%
Mint láthatja, végül azt mondja nekünk «Igen, hálózatban van»🙂
A legfontosabb itt az, hogy valóban megértik ezt a feltételekkel kapcsolatban, ezért hagyok neked egy másik kódot, hogy újra megmagyarázd, de más szempontból.
read "texto"
if [ "$texto" = "3" ]; then
echo "Correcto"
else
echo "Incorrecto"
fi
Mit jelent ez egyszerű, soronként hagyom a magyarázatot:
1. sor: Amit írunk, az lesz a változó értéke «szöveg»(Idézőjelek nélkül).
2. sor: Ellenőrizze, hogy a változó tartalma (amit most írtunk) 3.
3. sor: Lét esetén 3, megmutatja nekünk a szöveget «Helyes»(Idézőjelek nélkül).
4. sor: Egyébként (vagyis ha nem írtunk 3-at).
5. sor: Ez megmutatja nekünk a szöveget «Helytelen»(Idézőjelek nélkül).
6. sor: Az állapot vége.
Ahogyan rájöttek, ha fogalmazunk visszhang majd dupla idézőjelek között («) egy szöveget, akkor ez a szöveg megjelenik a terminálon. Vagyis ha ezt tesszük:
echo "esto es una prueba"
Megmutatja a szöveget a terminálon: ez egy teszt
De visszatérve erre a második példára, meg fogom mutatni ennek a második szkriptnek a hasznosságát (és végrehajtását) valami NAGYON egyszerűvel ... a tipikus «mennyi az 1 + 2?«
Otthagyom a teljes szkript kódját:
#!/bin/bash
# -*- ENCODING: UTF-8 -*-
echo "¿Cuánto es 1 + 2?"
read "texto"
if [ "$texto" = "3" ]; then
echo "Correcto"
else
echo "Incorrecto"
fi
exit
A szkript így működik:
% CODE2%
És hát ... nincs mit hozzáfűzni.
Ez valami elemi, egyszerű igen, de mégis megpróbáltam a lehető legjobban megmagyarázni, mert nem mindenkinek van programozó lelke, és sokszor ilyen (vagy hasonló) szkripteket kell készítenünk, mindenesetre én remélem, hogy ez a cikk hasznos lesz Önnek valakinek 🙂
Ha bármilyen kétsége, kérdése, panasza vagy javaslata lenne, hagyja itt, szívesen válaszolok Önnek, és így mindannyian többet tudunk 😀
Üdvözlet
Te profi vagy !!! *vagy*
Nah semmiért 😀
Ha neked szolgált és érdekes, elégedett vagyok 😉
Üdvözlet barátom
@ KZKG ^ Gaara,
a bash programozásról szólva kérdésem lenne:
Mi a különbség egy ilyen változó deklarálása között VAR = hello és így deklarálva VAR = $ {VAR: -hello}?
Elmagyarázom:
http://pastebin.com/a3cfWXeD
üdvözlet 😉
Helló
Nos, egyáltalán nem vagyok a bash szakértője ... valójában fogalmam sincs LOL-ról !!
Amint kijelentem a változókat, ez így van:
: ${OPTFOLDER:="/opt/"}
De mivel mindig így tettem, nem tudom mi lehet a különbség őszintén 🙁
@ KZKG ^ Gaara
Nos, feltettem a kérdést, mert az az igazság, hogy én sem tudtam, én általában a SlackBuilds-t írom, és az az igazság, hogy a VAR1-ben deklarált változók bővelkednek ezekben a szkriptekben. Egy gyors google keresés segített tisztázni ezt a kérdést, megosztom mindenkivel, hogy mindannyian megtanulhassuk:
Forgatókönyv:
http://pastebin.com/faAQb35w
Magyarázat:
A VAR = $ {VAR: -default_value} alakú változók deklarálása azt jelenti, hogy a VAR változó csak akkor veszi az alapértelmezett értéket, ha az érték nulla vagy nem létezik.
Gyakorlati példa:
a szkript végrehajtásakor kéri a VAR változóba tárolandó érték megadását, ha valamit beírnak, az megmutatja, hogy mi lett beírva. Ha nem írunk be semmit, és megnyomjuk az Enter billentyűt, akkor a VAR változót nullának nyilvánítjuk, ezért az alapértelmezett értéket mutatja.
Üdvözlet.
HAHA ezt nem tudtam 😀
Ok, nagyon köszönöm barátom ... ezt értettem a cikk végén, nem szándékozom tanítani valamit, és ennyi, tudom, hogy mindig itt tanulok valami újat 😀
Üdvözlet és köszönet még egyszer.
igazad van, az ember itt több dolgot megtanul.
üdvözletet és boldog ünnepeket !! 😀
Félelmetes és kiválóan megmagyarázott +1, az az idő, amire neked ...
de megérem a fáradságot 😉
80% -ot valóban 1 nap alatt írtam, ennyi időbe telt, mire csak az internetem nem engedte.
Köszönöm a megjegyzést 😉
Ennek másik módja a DNS használata, mivel néha a hálózatok blokkolják az ICMP protokollt:
(host -ta IP-CÍM> / dev / null 2> & 1) && echo "Csatlakozva a hálózathoz"
Azt is észreveszi, hogy ebben a példában a visszatérési érték ellenőrzése implicit 😉
Te, mint mindig barátod, olyan tippekkel, amiket nem ismerek teljesen HAHAHA.
Köszönöm, a megjegyzést nagyra értékeljük, és hehe ... még egy új dolog, amit megtanultam 😀
Köszönöm
????
Annak ellenére, hogy több nap telt el a téma közzététele óta, nagyon sokat szolgált nekem, most, hogy forgatókönyvet készítettem bash-ban .. Köszönöm Gaara ..
Doktor köszönöm a segítséget, amit világossá tett a számomra.
Csak egy kérdés, hogyan tegyem, hogy amikor az egyik számítógép automatikusan leállítja a pingelést, a másik megváltoztatja az IP-címet. Nekem van.
az IP megváltoztatásához
#! / bin / bash
ping -c 10 192.168.1.50 # Ha nem pingel automatikusan
ifconfig eth0 192.168.1.50 netmaszk 255.255.255.0 broadcast 192.168.1.0
ifconfig eth0 le
ifconfig eth0 fel
mert ha összehasonlítja a kérdőjelet? mi a különbség a? bármely más levél
$? "előző kimenetet vagy kimenetet" jelent, vagyis abban az esetben, ha az előző parancs eredménye ... 🙂
Van egy másik módszer ugyanezen eredmény elérésére, a ping parancsot közvetlenül argumentumként továbbítva, ha:
ha ping -c 1 IP-CÍM; akkor
visszhang "Igen, a neten van"
más
echo "Nincs a hálózaton"
fi
Az történik, hogy ha kiértékeli az argumentumként átadott parancs visszatérési értékét, ha 0-t ad vissza, akkor bármi más hamis. A szögletes zárójelek egyenértékűek a tesztparancssal. De bármilyen parancsot átadhat érvként (mindaddig, amíg a parancs visszaad valamilyen értéket).
Üdvözlet! Hogyan futtathatok egy script.sh-t egy X felhasználóval a szkriptben, létrehozok egy Y felhasználót, és az Y felhasználó folytatja a script.sh futtatását.
Meg lehet ezt csinálni ??
Nagyon érdekes, köszönöm!
Köszönöm a hozzájárulást, egy órája volt, hogy megértsem xD, de megértettem !!!!.
A forgatókönyv rendben van. Aritmetikailag meg lehet csinálni ($? == 0) néven is, ha nulla egyenlő, akkor nincs a hálózaton, különben a hálózaton van. És ha mégis szeretnénk egy kicsit interaktívabbá tenni, akkor azt mondhatjuk:
echo -n Adja meg az IP-címet:
olvasni ip
ping -c 1 $ ip
Üdvözlet! Nagyon új vagyok ebben. Próbálok jegyet készíteni (alfanumerikus) egy olvasás során, és szeretném, ha a beírt fájl formátuma megfelelő (ABC-123456) végrehajtana egy "x" parancsot, és nem nem tudom, hogyan kell csinálni, tudnál nekem segíteni?
visszhang "Jegy megadása"
read -p jegy
ha $ jegy = "nincs ötlet (formátum: ABC-123456"); majd cp file.txt $ jegy; különben visszhangzik "rossz formátum, próbálkozzon újra"; olvas -p; fi.
Persze, hogy szörnyű és nevetnek haha, de mint mondtam, csak ezzel kezdem.
Ha rosszul magyarázom, kérem, mondja meg, és megpróbálok jobbat csinálni.
Ölelj meg mindenkit.
Kiváló magyarázat, üdvözlet
Kicsit kétségeim vannak az if, else és másokkal kapcsolatban.
Szeretnék egy szkriptet ellenőrizni, hogy létezik-e egy fájl (a naplók egyike), és ha nem, akkor létrehozza és később írjon bele. De ha létezik, azt szeretném, ha csak írj rá.
Amim van:
dátum = `dátum -R`
#Változó dátumot teszteltem, amely nem frissül a kezdete között
#folyamat és véget ér, néha eltelhet egy óra és nem jön ki a megfelelő idő.
if [-f /home/user/logs/test.log];
akkor
érintse meg a /home/usuario/logs/test.log elemet
más
echo "$ dátum: Frissítve" >> /home/user/logs/test.log
echo «———————————————-» >> /home/user/logs/test.log
fi
Elméletileg rendben kell lennie, de a valóság az, hogy nem frissül, ha a hivatkozott fájl már létezik
sajnálom, láttam, hogy nem küldték el, és megduplázódott