Здраво
Овој пат ќе ви покажам како да направите скрипта со состојба во Баш, што во превод е:
Ако X нешто што сакате е завршено, Y акција е направено, ако не е направено, тогаш е направено друго дејство.
Едноставно објаснување не
Сега, размислував неколку минути за некој пример што треба да го искористам во ова упатство, ми се појави следнава дилема / проблем / ситуација:
Ние сме на мрежата на нашата компанија и сакаме да знаеме дали Х компјутер е поврзан на мрежата. За ова правиме а скрипта што ќе стори пинг кон тој компјутер и ако е на мрежа (т.е. ако го врати пинг) ќе ни каже дека ДА, тоа е на мрежата, инаку (т.е. го нема на мрежата) ќе ни каже дека НЕ е на мрежата.
Откако ќе се заврши ова, сега ќе објаснам како да циклусирам со услови
Еве го кодот:
ping -c 1 DIRECCION-IP
if [ $? -ne 0 ]; then
echo "No está en red"
else
echo "Sí está en red"
fi
Не грижи се, ќе ти го објаснам ова детално
пинг е командата што ќе ја користиме и ќе ни каже дали тој компјутер е на мрежата. За да кажеме кој компјутер сакаме да провериме дали е или не на мрежата, мора да се смениме АДРЕСА НА ИП со очигледно IP адресата на компјутерот што сакаме да ја провериме.
Како што можете да видите, ставив «-в 1«, Што е потребно за нас. Кога пингуваме компјутер, ова дејство не запира (пинг-пингот) сè додека не се притиснеме [Ctrl] + [C], па ставање «-в 1»Ние ви кажуваме да направите само една проверка (само еден обид за пинг) и никој друг, ова ќе го натера да застане веднаш, тоа е ... ќе провери дали компјутерот е на мрежата само еднаш.
Ако се сомневате во ова, немате болка ... велат тие и со задоволство ќе им објаснам повторно
Сега доаѓа циклусот, бидејќи она што го објаснив не е ништо повеќе од нормална команда / акција 😀
if [ $? -ne 0 ]; then
echo "No está en red"
else
echo "Sí está en red"
fi
За да го разберете ова, ќе објаснам еден исклучително важен детал за Баш
Најпознатите од оваа тема може да ме означат како погрешен или нешто слично, но еј, го пишувам за почетници или помалку експерти, се додека тие го разбираат тогаш одлично 😉
Се случува како во Баш тоа е нешто како 0 y 1, тоа е, или сте живи или сте мртви, кога ќе се изврши команда или акција: Или егзекутирани добро Нема проблем (1), или имаше некои проблем или грешка (0).
Ние извршуваме X акција или команда, а она што го сторивме може да се изврши добро или лошо, можеби имаше грешка или не, и тука е деталот 😉
Ако она што го испраќаме да го сториме (во овој случај: пинг-c 1 IP-адреса) не даде грешка и беше успешна, па ќе ја врати вредноста: 1 . Во спротивно, и ако дејството (т.е. пинг-пингот) не беше успешно, ќе врати вредност 0.
И, конечно, она што значи горенаведениот код е ова:
Ако тогаш се врати вредноста 0
Прикажи го текстот: «Не е на мрежа»
Инаку (и вратете НЕ 0, туку 1)
Прикажи го текстот: «Ако е во мрежа«
Ова што штотуку ви го објаснив, ќе ни служи во иднина за многу работи, бидејќи навистина е корисно да може да се каже дека ако X-акција даде грешка, направете Y-а, а во случај X-дејството да не даде грешка, а потоа направи Z акција.
Знам дека некои може малку да се вклучат, па затоа се обидов да го објаснам тоа на неколку различни начини, обидувајќи се да ги натерам сите да го разберат на еден или друг начин. Во случај некој да остане во недоумица, нека ме извести.
Сега, ајде да ја направиме нашата скрипта
Ние мора да ги следиме чекорите во ова упатство: Баш: Како да направите извршна скрипта
Потоа, ајде да го копираме следниот код во таа датотека (скрипта.ш), и на крајот да речеме «излезете»(Без наводници):
ping -c 1 DIRECCION-IP
if [ $? -ne 0 ]; then
echo "No está en red"
else
echo "Sí está en red"
fi
Треба да изгледа вака (запомнете дека тие сигурно ја сменија IP-адресата во IP што ја сакаат):
Овде можете да ја видите скриптата што работи:
% КОД 1%
Како што можете да видите, на крајот тој ни вели «Да, тоа е во мрежа»
Она што е важно тука е дека тие навистина го разбираат ова за условите, затоа ви оставам друг код за да го објасните повторно, но од друга гледна точка.
read "texto"
if [ "$texto" = "3" ]; then
echo "Correcto"
else
echo "Incorrecto"
fi
Што значи ова е едноставно, го оставам образложението линија по линија:
1-та линија: Она што го пишуваме, тоа ќе биде вредноста на променливата «текст»(Без наводници).
2-ри ред: Проверете дали е содржината на променливата (она што штотуку го напишавме) 3.
3-та линија: Во случај да биде 3, ќе ни го покаже текстот «Поправете»(Без наводници).
4-та линија: Инаку (тоа е, во случај да не сме напишале 3).
5-та линија: Usе ни го покаже текстот «Погрешно»(Без наводници).
6-та линија: Крај на состојбата.
Како што тие беа во можност да сфатат, ако ставиме пропушти а потоа помеѓу двојни понуди («) текст, ова ќе предизвика тој текст да биде прикажан во терминалот. Тоа е, ако ставиме:
echo "esto es una prueba"
Usе ни го покаже текстот во терминалот: ова е тест
Но, навраќајќи се на овој втор пример, ќе ви ја покажам корисноста (и извршувањето) на оваа втора скрипта со нешто МНОГУ едноставно…… типично «колку е 1 + 2?«
Го оставам кодот на целосната скрипта:
#!/bin/bash
# -*- ENCODING: UTF-8 -*-
echo "¿Cuánto es 1 + 2?"
read "texto"
if [ "$texto" = "3" ]; then
echo "Correcto"
else
echo "Incorrecto"
fi
exit
Еве како работи сценариото:
% КОД 2%
И добро ... ништо повеќе за додавање.
Ова е нешто основно, едноставно да, но сепак се обидов да го објаснам што е можно подобро, бидејќи не секој има душа на програмер, и многу пати треба да правиме скрипти како овие (или слични), во секој случај јас се надевам дека овој напис ќе ви биде корисен некој
Секое сомневање или прашање, поплака или предлог ве молам, оставете го тука, јас со задоволство ќе ви одговорам и на тој начин, сите учиме малку повеќе
Со почит
26 коментари, оставете ги вашите
Вие сте про !!! * или *
Не за ништо nothing
Ако ви служеше и е интересно, задоволен сум
Поздрав пријателе
@ KZKG ^ Гаара,
зборувајќи за баш-програмирање, имам едно прашање:
Која е разликата помеѓу прогласување на варијабла како оваа VAR = здраво и нејзино декларирање VAR = $ {VAR: -hello}?
Објаснувам:
http://pastebin.com/a3cfWXeD
поздрав
Здраво
Па, јас воопшто не сум експерт за баш ... всушност, немам идеја ЛОЛ !!
Како што ги прогласувам променливите, вака е:
: ${OPTFOLDER:="/opt/"}
Но, бидејќи јас секогаш го правев тоа вака, не знам каква разлика може да биде искрено
@ KZKG ^ Гаара
Па, го поставив прашањето бидејќи вистината е дека и јас не знаев, јас обично пишувам SlackBuilds и вистината е дека променливите декларирани како во VAR1 изобилуваат со овие скрипти. Брзо пребарување на Google ми помогна да го разјаснам ова прашање, го споделувам со сите за да можеме сите да научиме:
Скрипта:
http://pastebin.com/faAQb35w
Објаснување:
Декларирање на променливи на образецот VAR = $ {VAR: -default_value} значи дека променливата VAR ќе ја земе вредноста default_value ако и само ако вредноста е нула или не постои.
Практичен пример:
При извршување на скриптата, се бара да се внесе вредност што треба да се зачува во VAR променливата, ако нешто е внесено, тоа ќе покаже што е внесено. Ако не внесеме ништо и притиснеме enter, ние ја прогласуваме променливата VAR за ништовна, затоа таа покажува value_default.
Поздрав.
ХАХА не знаев дека
Добро, многу ти благодарам пријателе ... на тоа мислев на крајот од статијата, немам намера да учам нешто и тоа е тоа, знам дека тука секогаш ќе учам нешто ново
Поздрав и благодарност уште еднаш.
во право си, овде учи неколку работи.
честитки и среќни празници !! 😀
Страшно и одлично објаснето +1, времето кога ќе ве однесе ...
но вредам за напор
Јас всушност напишав 80% за само 1 ден, ми требаше толку време да го објавам само затоа што мојот Интернет не ми дозволуваше.
Ви благодариме за вашиот коментар
Друг начин да го направите тоа е користење на DNS, бидејќи понекогаш мрежите имаат блокиран протокол ICMP:
(домаќин -ta IP-адреса> / dev / null 2> & 1) && ехо „Поврзано со мрежа“
Исто така, ќе забележите дека во овој пример проверката на повратната вредност е имплицитна
Вие како и секогаш пријател, со совети што не ги познавам целосно ХАХАХА.
Ви благодарам, коментарот е ценет и хехе ... уште една нова работа што ја учам
Благодарам
🙂
И покрај тоа што поминаа неколку дена од објавувањето на оваа тема, таа многу ми послужи, сега кога направив сценарио во баш. Благодарам Гаара ..
Док. Благодарам за помошта што ми ги разјасни работите.
Само пребарување, како да направам така што кога едниот компјутер ќе престане автоматски да пингува, другиот да ја смени IP. Го имам ова.
за промена на IP
#! / корпа за отпадоци / баш
ping -c 10 192.168.1.50 # Ако не пинира автоматски
ifconfig eth0 192.168.1.50 нет-маска 255.255.255.0 емитува 192.168.1.0
ifconfig eth0 надолу
ifconfig eth0 горе
затоа што кога се споредува со прашалникот ако се користи? каква разлика постои помеѓу ставањето на? кое било друго писмо
$? значи „претходниот излез или излез“, тоа е, во случај резултатот од претходната наредба ...
Постои и друг начин да се постигне истиот резултат, поминувајќи ја командата за пинг директно како аргумент до:
ако пинг-c 1 IP-адреса; тогаш
ехо „Да, тоа е на мрежата“
друго
ехо „Не на мрежата“
fi
Она што се случува е дека ако ја процени повратната вредност на командата што ја донесувате како аргумент, ако врати 0, тогаш е точно, што било друго е неточно. Квадратните загради се еквивалентни на командната тест. Но, можете да ја предадете секоја команда како аргумент (се додека командата врати некоја вредност).
Здраво, како можам да извршам скрипта.sh со корисник X во скриптата, создавам корисник Y, и тој корисник Y продолжува да ја извршува скриптата.sh
Дали може да се направи ова ??
Многу интересно, благодарам!
Благодарам за придонесот, поминав еден час да го разберам xD, но го разбрав !!!!.
Сценариото е добро. Аритметички, може да се направи и како ($? == 0) ако е еднакво на нула, не е на мрежата, инаку е на мрежата. И, ако сепак сакаме да го направиме тоа малку поинтерактивно, можеме да кажеме:
echo -n Внесете ја IP-адресата:
прочитај ip
пинг -c 1 $ IP
Здраво, јас сум многу нов во ова, се обидувам да направам број на билет (алфанумерички) преку читање и сакам ако внесениот да има точен формат (ABC-123456) да изврши команда "x" и да не ' Знам како да го направам тоа, дали можеш да ми помогнеш?
ехо „Внесете билет“
прочитај -p билет
ако $ билет = "нема идеја (формат ABC-123456"); потоа cp file.txt $ билет; друго ехо „погрешен формат, обидете се повторно“; чита -ст; фи
Секако дека е ужасно и тие се смеат хаха, но како што реков, јас само што започнав со ова.
Ако лошо објаснам, те молам кажи ми и се обидувам да направам подобро.
Прегрни ги сите.
Одлично објаснување, поздрав
Малку се сомневам во ако, друго и други.
Сакам скрипта да проверам дали постои датотека (еден од дневниците) и ако не, да ја креирам и подоцна да пишувам во неа. Но, ако постои, сакам само да му пишете.
Она што го имам е:
датум = `датум -R`
#Јас тестирав променлива датум, која не се ажурира помеѓу почетокот на a
#процес и завршува, понекогаш може да помине еден час и да не излезе точното време.
ако [-f /home/user/logs/test.log];
потоа
допрете /home/usuario/logs/test.log
друго
ехо „$ датум: Ажурирано“ >> /home/user/logs/test.log
ехо «———————————————-» >> /home/user/logs/test.log
fi
Теоретски би требало да е во ред, но реалноста е дека не се ажурира ако референцираната датотека веќе постои
извини видов дека не е пратен и се дуплира