привіт
Цього разу я покажу вам, як створити сценарій з умовою в Удар, що в перекладі:
Якщо X, що ви хочете, виконано, виконується дія Y, якщо не виконано, то виконується інша дія.
Просте пояснення немає 😀
Зараз я кілька хвилин думав про якийсь приклад для використання в цьому підручнику, і мені спала на думку така дилема / проблема / ситуація:
Ми знаходимось у мережі нашої компанії, і ми хочемо знати, чи підключений комп’ютер X до мережі. Для цього ми робимо a сценарій що він буде робити пінг до цього комп'ютера, і якщо він знаходиться в мережі (тобто якщо він повертає файл пінг) скаже нам, що ТАК, це в мережі, інакше (тобто його немає в мережі) він скаже нам, що НЕ в мережі.
Після того, як це буде зроблено, зараз я поясню, як робити цикл з умовами 🙂
Ось код:
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
Щоб ви це зрозуміли, я розтлумачу надзвичайно важливу деталь Bash 🙂
Найдосвідченіший у цій темі міг би поставити мене як неправильний чи щось подібне, але привіт, я пишу це для новачків чи менш знавців, якщо вони це прекрасно розуміють 😉
Буває, що як і в Удар це щось на зразок 0 y 1, тобто або ви живі, або ви мертві, коли виконується команда або дія: Або виконано добре Нема проблем (1) було дещо проблема або помилка (0).
Ми виконуємо X-дію чи команду, і те, що ми зробили, могло бути виконано добре чи погано, можливо, в ньому була помилка чи ні, і тут деталь 😉
Якщо те, що ми надсилаємо робити (у цьому випадку: ping -c 1 IP-АДРЕСА) не видав помилку і був успішним, тому він поверне значення: 1 . В іншому випадку, і якщо дія (тобто пінг) не була успішною, вона поверне значення 0.
І нарешті, що означає наведений вище код:
Якщо було повернуто значення 0, тоді
Відобразити текст: «Не в мережі»
В іншому випадку (і поверніть НЕ 0, а 1)
Відобразити текст: «Якщо це в мережі«
Це, що я щойно вам пояснив, послужить нам у майбутньому багатьом речам, тому що дійсно корисно мати можливість сказати, що якщо X дія дала помилку, виконайте Y дію, а якщо X дія не дала помилка, то виконайте Z дію.
Я знаю, що деякі можуть трохи залучитись, тому я намагався пояснити це різними способами, намагаючись зробити так, щоб усі так чи інакше зрозуміли це. Якщо хтось сумнівається, повідомте мене.
Тепер давайте зробимо наш сценарій 😀
Ми повинні дотримуватися кроків у цьому посібнику: Bash: Як створити виконуваний сценарій
Тоді давайте скопіюємо наступний код у цей файл (script.sh), а в кінці скажемо «вихід»(Без лапок):
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-й рядок: Він покаже нам текст «Неправильно»(Без лапок).
6-й рядок: Кінець умови.
Як вони змогли усвідомити, якщо ми ставимо нудьгувати а потім між подвійними лапками («) текст, це призведе до того, що цей текст буде відображатися в терміналі. Тобто, якщо поставити:
echo "esto es una prueba"
Він покаже нам текст у терміналі: це перевірка
Але повертаючись до цього другого прикладу, я покажу вам корисність (і виконання) цього другого сценарію чимось ДУЖЕ простим 😀 ... типовим «скільки коштує 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%
І добре ... нічого більше додати.
Це щось елементарне, просте так, але все-таки я намагався це пояснити якомога краще, тому що не кожен має душу програміста, і багато разів нам потрібно робити такі сценарії (або подібні), у будь-якому випадку я сподіваюся, ця стаття комусь стане в нагоді 🙂
Будь-які сумніви чи запитання, скарги чи пропозиції, будь ласка, залиште тут, я з радістю відповім вам, і отже, ми всі дізнаємось трохи більше 😀
привіт
Ви професіонал !!! * або *
Ні, ні за що 😀
Якщо це послужило вам і це цікаво, я задоволений 😉
Привіт друг
@ KZKG ^ Гаара,
говорячи про програмування Bash, у мене виникає запитання:
Яка різниця між оголошенням такої змінної, як VAR = привіт, та такою VAR = $ {VAR: -hello}?
Пояснюю:
http://pastebin.com/a3cfWXeD
привітання 😉
привіт
Ну, я зовсім не фахівець з Bash ... насправді, я поняття не маю LOL !!
Оскільки я оголошую змінні, це так:
: ${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:
(host -ta IP-ADDRESS> / dev / null 2> & 1) && echo "Підключено до мережі"
Ви також помітите, що в цьому прикладі перевірка поверненого значення є неявною 😉
Ти як завжди друг, з порадами, яких я не знаю повністю ХАХАХА.
Дякую, коментар оцінений, і хе-хе ... ще одна нова річ, яку я дізнався 😀
Грекіас
🙂
Незважаючи на те, що минуло кілька днів з моменту публікації цієї теми, це мені дуже допомогло, тепер, коли я зробив сценарій на bash .. Дякую Гаара ..
Док. Дякую за допомогу, яку ви мені зрозуміли.
Просто запит, як мені зробити так, щоб коли один комп’ютер перестає автоматично пінгувати, інший змінює 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 вгору
тому що при порівнянні з, якщо ви використовуєте знак питання? яка різниця між тим, як ставити? будь-який інший лист
$? означає "попередній результат", тобто, якщо результат попередньої команди ... 🙂
Існує ще один спосіб досягти того самого результату, передаючи команду ping безпосередньо як аргумент if:
якщо ping -c 1 IP-АДРЕСА; тоді
echo "Так, це в мережі"
ще
echo "Не в мережі"
fi
Що трапляється, це те, що якщо обчислює значення повернення команди, яку ви передаєте як аргумент, якщо вона повертає 0, це істина, все інше є помилковим. Квадратні дужки еквівалентні команді тесту. Але ви можете передати будь-яку команду як аргумент (якщо команда повертає якесь значення).
Привіт, як мені виконати script.sh з користувачем X у сценарії, в якому я створюю користувача Y, і цей користувач Y продовжує виконувати script.sh
Чи можна це зробити ??
Дуже цікаво, дякую!
Дякую за внесок, я провів годину, щоб зрозуміти це xD, але я зрозумів це !!!!.
Сценарій чудовий. Арифметично це також можна зробити як ($? == 0), якщо воно дорівнює нулю, його немає в мережі, інакше - у мережі. І якщо ми все-таки хочемо зробити його трохи більш інтерактивним, ми можемо сказати:
echo -n Введіть IP:
прочитати ip
ping -c 1 $ ip
Привіт, я дуже новачок у цьому, я намагаюся зробити номер квитка (буквено-цифровий) за допомогою прочитаного, і я хочу, щоб якщо те, що введено, має правильний формат (ABC-123456), виконати команду "x", і я не ' я не знаю, як це зробити, чи не могли б ви мені допомогти?
луна "Введіть квиток"
читати -p квиток
якщо $ квиток = "не маю ідеї (формат ABC-123456"); потім cp file.txt $ квиток; else echo "неправильний формат, спробуйте ще раз"; читати -p; fi.
Звичайно, це жахливо, і вони сміються ха-ха, але, як я вже сказав, я тільки починаю з цього.
Якщо я поясню погано, будь ласка, скажіть мені, і я намагаюся зробити краще.
Обняти всіх.
Відмінне пояснення, вітаю
Я трохи сумніваюся щодо if, else та інших.
Я хочу, щоб сценарій перевіряв, чи існує файл (один із журналів), а якщо ні, то створював його та пізніше записував у нього. Але якщо він існує, я хочу, щоб ви просто написали йому.
Що у мене є:
дата = `дата -R`
#Я тестував змінну дату, яка не оновлюється між початком a
#процес і закінчується, іноді може пройти і година, а правильний час не виходить.
якщо [-f /home/user/logs/test.log];
потім
торкніться /home/usuario/logs/test.log
ще
echo "$ дата: оновлено" >> /home/user/logs/test.log
echo «————————————————» >> /home/user/logs/test.log
fi
Теоретично це має бути добре, але реальність така, що він не оновлюється, якщо посилання на файл уже існує
вибачте, я бачив, що його не надіслали, і він збільшився вдвічі