Bash: Нөхцөлүүд (if-then-else)

Сайн уу 😀

Энэ удаад би нөхцөлтэй скрипт хэрхэн хийхийг зааж өгөх болно Bash, орчуулсан нь:

Хэрэв таны хүсч буй X зүйл биелсэн бол Y үйлдэл хийгдэх бөгөөд хэрэв биелээгүй бол өөр үйлдэл хийгдэнэ.

Энгийн тайлбар үгүй

Одоо би энэ гарын авлагад ашиглах хэдэн жишээг бодсоны дараа дараахь хоёрдмол байдал / асуудал / нөхцөл байдал надад тохиолдсон юм.

Бид компанийнхаа сүлжээнд холбогдсон бөгөөд X компьютер сүлжээнд холбогдсон эсэхийг мэдэхийг хүсч байна. Үүний тулд бид скрипт тэр юу хийх вэ? ширээний тэр компьютер руу чиглүүлж, хэрэв энэ нь сүлжээнд байгаа бол (өөрөөр хэлбэл хэрэв ширээний) тийм ээ, энэ нь сүлжээнд байгаа, өөрөөр хэлбэл (энэ нь сүлжээнд байдаггүй) сүлжээнд БИШ гэдгийг бидэнд хэлэх болно.

Үүнийг хийсний дараа одоо нөхцлөөр хэрхэн мөчлөг хийхийг тайлбарлах болно

Энд код байна:

ping -c 1 DIRECCION-IP
if [ $? -ne 0 ]; then
echo "No está en red"
else
echo "Sí está en red"
fi

Санаа зоволтгүй, би үүнийг танд дэлгэрэнгүй тайлбарлаж өгье 😉

ширээний гэдэг нь бидний ашиглах тушаал бөгөөд тухайн компьютер сүлжээнд байгаа эсэхийг хэлж өгөх болно. Сүлжээнд байгаа эсэхийг шалгахыг хүсч байгаа компьютерээ хэлэхийн тулд бид өөрчлөх ёстой IP ХАЯГ бид шалгахыг хүсч байгаа компьютерийн IP хаягаар мэдээжийн хэрэг.

Таны харж байгаагаар би «-с 1«, Аль нь бидэнд хэрэгтэй вэ. Бид компьютер дээр пинг хийх үед бид өөрсдийгөө дарах хүртэл энэ үйлдэл зогсохгүй (ping) [Ctrl] + [C], тиймээс «-с 1»Бид танд зөвхөн нэг баталгаажуулалт хийхийг (зөвхөн нэг пинг оролдлого) хийхийг шаардаж байна, ингэснээр үүнийг шууд зогсоох болно, өөрөөр хэлбэл ... компьютер сүлжээнд нэг удаа орсон эсэхийг шалгана.

Хэрэв та үүнд эргэлзэж байвал ямар ч зовиургүй ... тэд ингэж хэлдэг бөгөөд би танд үүнийг дахин тайлбарлахдаа баяртай байх болно

Одоо мөчлөг ирлээ, яагаад гэвэл миний сая тайлбарласан зүйл бол ердийн тушаал / үйлдлээс өөр юу ч биш юм

if [ $? -ne 0 ]; then
echo "No está en red"
else
echo "Sí está en red"
fi

Та үүнийг ойлгохын тулд би Bash-ийн маш чухал зүйлийг тайлбарлах болно

Энэ сэдвийг хамгийн сайн мэддэг нь намайг буруу юмуу эсвэл ийм зүйл гэж цоллож болох юм, гэхдээ хүүе, би үүнийг шинэхэн эсвэл бага шинжээчдэд зориулж бичье.

Энэ нь ийм байдлаар тохиолддог Bash энэ нь үүнтэй төстэй зүйл юм 0 y 1, өөрөөр хэлбэл, тушаал эсвэл үйлдлийг гүйцэтгэх үед та амьд эсвэл үхсэн байна: Эсвэл сайн гүйцэтгэсэн Асуудалгүй (1), эсвэл зарим нь байсан асуудал эсвэл алдаа (0).

Бид X үйлдэл эсвэл тушаалыг хэрэгжүүлдэг бөгөөд бидний хийсэн зүйл сайн эсвэл муу хийгдсэн байж магадгүй, алдаа гарсан байж магадгүй, энд нарийвчилсан мэдээлэл байна.

Хэрэв бид илгээсэн зүйлээ хийх юм бол (энэ тохиолдолд: ping -c 1 IP-ХАЯГ) алдаа өгөөгүй бөгөөд амжилттай болсон тул утга буцаах болно: 1 . Үгүй бол, хэрэв үйлдэл (өөрөөр хэлбэл ping) амжилтанд хүрээгүй бол утга буцаана 0.

 Эцэст нь дээрх код юу гэсэн үг вэ?

Хэрэв 0 утга буцаагдсан бол

Текстийг харуулах: «Сүлжээнд биш»

Үгүй бол (ба NOT 0 гэсэн утгыг буцааж өгнө үү, гэхдээ 1)

Текстийг харуулах: «Хэрэв энэ нь сүлжээнд байгаа бол«

Миний сая танд тайлбарласан зүйл бол ирээдүйд бидэнд олон зүйл дээр үйлчлэх болно, яагаад гэвэл X үйлдэл алдаа гаргасан бол Y үйлдэл хий, хэрэв X үйлдэл алдаа гаргаагүй бол Z үйлдэл хийгээрэй гэж хэлэх нь үнэхээр ашигтай юм.

Зарим нь бага зэрэг орооцолдож магадгүйг би мэднэ, тиймээс үүнийг хүн бүрт нэг талаар ойлгуулахыг хичээн хэд хэдэн янзаар тайлбарлахыг хичээсэн. Хэрэв хэн нэгэн эргэлзээтэй байгаа бол надад мэдэгдээрэй.

Одоо зохиолоо хийцгээе 😀

Бид энэ гарын авлагын алхамуудыг дагаж мөрдөх ёстой. Bash: Ажиллаж болох скриптийг хэрхэн яаж хийх вэ

Дараа нь дараах кодыг тэр файл руу хуулж авъя (скрипт.ш), эцэст нь «гарах»(Ишлэлгүйгээр):

ping -c 1 DIRECCION-IP
if [ $? -ne 0 ]; then
echo "No está en red"
else
echo "Sí está en red"
fi

Энэ нь иймэрхүү байх ёстой (та IP-ADDRESS хаягаа хүссэн IP болгон өөрчилсөн гэдгээ санаарай):

Энд ажиллаж байгаа скриптийг харж болно.

% CODE1%

 

Таны харж байгаагаар эцэст нь тэр бидэнд «Тиймээ энэ сүлжээнд байна»🙂

Энд хамгийн чухал зүйл бол тэд нөхцөл байдлын талаар үүнийг ойлгосон байх тул би үүнийг дахин тайлбарлах өөр код үлдээж байна, гэхдээ өөр өнцгөөс.

read "texto"
if [ "$texto" = "3" ]; then
echo "Correcto"
else
echo "Incorrecto"
fi

Энэ нь юу гэсэн үг вэ гэхээр тайлбарыг мөр мөрөөр үлдээж байна.

1-р мөр: Бидний бичсэн зүйл бол хувьсагчийн утга болно.мессеж»(Ишлэлгүйгээр).

2-р мөр: Хувьсагчийн агуулга (бидний сая бичсэн зүйл) байгаа эсэхийг шалгана уу 3.

3-р мөр: Байгаа тохиолдолд 3, энэ нь бидэнд текстийг харуулах болно «Correcto»(Ишлэлгүйгээр).

4-р мөр: Үгүй бол (энэ нь бид 3 бичээгүй тохиолдолд).

5-р мөр: Энэ нь бидэнд текстийг харуулах болно «Буруу байна»(Ишлэлгүйгээр).

6-р мөр: Нөхцөлийн төгсгөл.

Хэрэв бид үүнийг ухамсарлаж чадвал Echo дараа нь давхар ишлэлүүдийн хооронд («) текст, ингэснээр текстийг терминал дээр харуулах болно. Энэ нь хэрэв бид дараахь зүйлийг тавьвал:

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

Скрипт хэрхэн ажилладагийг энд харуулав.

% CODE2%

 

За ... нэмж хэлэх зүйл алга.

Энэ бол энгийн зүйл, гэхдээ тийм ээ, гэхдээ би үүнийг аль болох сайн тайлбарлахыг хичээсэн, яагаад гэвэл хүн болгонд програмистын сэтгэл байдаггүй, иймэрхүү скриптүүдийг олон удаа хийх шаардлагатай болдог (эсвэл үүнтэй төстэй), ямар ч тохиолдолд би Энэ нийтлэл танд хэн нэгэнд хэрэг болно гэж найдаж байна

Аливаа эргэлзээ, асуулт, гомдол, санал байвал энд үлдээгээрэй, би танд дуртайяа хариулах болно, ингэснээр бид бүгд илүү ихийг сурч аваарай 😀

Баярлалаа!


Нийтлэлийн агуулга нь бидний зарчмуудыг баримталдаг редакцийн ёс зүй. Алдааны талаар мэдээлэхийн тулд товшино уу энд байна.

23 сэтгэгдэл, үлдээгээрэй

Сэтгэгдэлээ үлдээгээрэй

Таны и-мэйл хаяг хэвлэгдсэн байх болно. Шаардлагатай талбарууд нь тэмдэглэгдсэн байна *

*

*

  1. Мэдээллийг хариуцах: Мигель Анхель Гатан
  2. Мэдээллийн зорилго: СПАМ-ыг хянах, сэтгэгдлийн менежмент.
  3. Хууль ёсны байдал: Таны зөвшөөрөл
  4. Мэдээллийн харилцаа холбоо: Хуулийн үүргээс бусад тохиолдолд мэдээллийг гуравдагч этгээдэд дамжуулахгүй.
  5. Өгөгдөл хадгалах: Occentus Networks (ЕХ) -с зохион байгуулсан мэдээллийн сан
  6. Эрх: Та хүссэн үедээ мэдээллээ хязгаарлаж, сэргээж, устгаж болно.

  1.   Жалс гэж хэлэв

    Та бол дэмжигч !!! *эсвэл*

    1.    KZKG ^ Гаара гэж хэлэв

      Үгүй ээ
      Хэрэв танд үйлчилж, сонирхолтой байсан бол сэтгэл хангалуун байна 😉

      Сайн байцгаана уу найз минь

  2.   зөв гэж хэлэв

    @ KZKG ^ Гаара,
    bash програмчлалын талаар ярихад надад нэг асуулт байна:
    Хувьсагчийг ийм VAR = сайн уу гэж зарлах, ийм VAR = $ {VAR: -сайн} гэж зарлах хоёрын хооронд ямар ялгаа байдаг вэ?

    Би тайлбарлаж байна:
    http://pastebin.com/a3cfWXeD

    мэндчилгээ 😉

    1.    KZKG ^ Гаара гэж хэлэв

      Сайн уу 😀
      Би бол башёгийн талаар мэргэшсэн хүн биш шүү дээ ... үнэндээ надад ямар ч ойлголт алга ХАМАА !!
      Би хувьсагчдыг зарлахдаа иймэрхүү байна:
      : ${OPTFOLDER:="/opt/"}

      Гэхдээ би үүнийг үргэлж ийм байдлаар хийдэг байсан тул ялгаа нь юу байж болохыг мэдэхгүй байна 🙁

  3.   зөв гэж хэлэв

    @ KZKG ^ Gaara
    Үнэн бол би өөрөө ч мэдэхгүй байсан тул би ихэвчлэн SlackBuilds бичдэг тул VAR1-т зарласан хувьсагчид эдгээр скриптэд элбэг байдаг тул би асуулт асуув. Google-ээс хурдан хайлт хийх нь надад энэ асуултыг тодруулахад тусалсан тул бид бүгдтэй хуваалцаж, бид бүгд сурч мэдэх боломжтой болно.

    Скрипт:
    http://pastebin.com/faAQb35w

    Тайлбар:
    VAR = $ {VAR: -default_value} хэлбэрийн хувьсагчдыг зарлах нь VAR хувьсагч утга нь тэг эсвэл байхгүй тохиолдолд л default_value утгыг авна гэсэн үг юм.

    Практик жишээ:
    Скриптийг гүйцэтгэх үед VAR хувьсагчид хадгалагдах утгыг оруулахыг шаардана, хэрэв ямар нэг зүйл оруулсан бол оруулсан зүйлийг харуулах болно. Хэрэв бид юу ч оруулалгүй enter дарахад VAR хувьсагчийг null гэж зарлаж байгаа тул утга_default-ийг харуулна.

    Сайн байцгаана уу.

    1.    KZKG ^ Гаара гэж хэлэв

      ХАХА Би үүнийг мэдээгүй байсан 😀
      За, найздаа маш их баярлалаа ... гэж би өгүүллэгийн төгсгөлд хэллээ, би ямар нэгэн зүйл заах бодолгүй байна, тэгээд л би эндээс үргэлж шинэ зүйл сурах болно гэдгээ мэдэж байна.

      Дахин нэг удаа мэндчилж, талархал илэрхийлье.

      1.    зөв гэж хэлэв

        чиний зөв, хүн энд хэд хэдэн зүйлийг сурдаг.

        мэндчилгээ, баярын мэнд хүргэе !! 😀

  4.   Лукас Матиас гэж хэлэв

    Гайхамшигтай бөгөөд гайхалтай тайлбарласан +1, энэ нь танд цаг хугацаа шаардагдах болно ...
    гэхдээ би хүчин чармайлт гаргах хэрэгтэй

    1.    KZKG ^ Гаара гэж хэлэв

      Би ердөө 80 өдрийн дотор 1% бичсэн, интернет маань намайг зөвшөөрөөгүй тул нийтлэх гэж маш их хугацаа зарцуулсан.
      Сэтгэгдэл бичсэнд баярлалаа 😉

  5.   Хюго гэж хэлэв

    Үүнийг хийх өөр нэг арга бол DNS ашиглах явдал юм, учир нь заримдаа сүлжээнд ICMP протокол хаагдсан байдаг:

    (host -ta IP-ADDRESS> / dev / null 2> & 1) && echo "Сүлжээнд холбогдсон"

    Энэ жишээнд буцах утгыг шалгах нь далд утгатай болохыг та анзаарах болно

    1.    KZKG ^ Гаара гэж хэлэв

      Та үргэлж найз шигээ, миний бүрэн мэдэхгүй зөвлөмжүүдтэй HAHAHA.
      Баярлалаа, сэтгэгдлийг нь үнэлж, хэхэ ... миний сурч мэдсэн бас нэг шинэ зүйл 😀

  6.   Датукс гэж хэлэв

    баярлалаа

    🙂

  7.   Лепер_Иван гэж хэлэв

    Хэдийгээр энэ сэдэв хэвлэгдээд хэд хонож байгаа ч би скрипт хийчихсэн болохоор надад маш их тус болсон .. Баярлалаа Гаара ..

  8.   Эдгар наварро гэж хэлэв

    Док.Надад бүх зүйлийг ойлгомжтой болгож өгсөнд баярлалаа.

    Зөвхөн нэг асуулт бол би яаж хийх хэрэгтэй вэ, нэг компьютер автоматаар пинг хийхээ больчихоод нөгөө нь IP-ээ өөрчилдөг. Надад энэ байна.

    IP-г өөрчлөх
    #! / bin / bash
    ping -c 10 192.168.1.50 # Хэрэв энэ нь автоматаар пинг хийхгүй бол
    ifconfig eth0 192.168.1.50 netmask 255.255.255.0 цацалт 192.168.1.0
    ifconfig eth0 доош
    ifconfig eth0 дээш

  9.   Абрахам гэж хэлэв

    Учир нь хэрэв та асуултын тэмдэг ашигладаг бол харьцуулахдаа? тавих хоёрын хооронд ямар ялгаа байна вэ? бусад захидал

    1.    KZKG ^ Гаара гэж хэлэв

      $? гэдэг нь 'өмнөх гаралт ба гаралт' гэсэн үг, өөрөөр хэлбэл өмнөх тушаалын үр дүн ... 🙂

      1.    Андре гэж хэлэв

        Үүнтэй ижил үр дүнд хүрэх өөр нэг арга бий бөгөөд ping командыг дараах аргумент болгон шууд дамжуулна уу:

        хэрэв ping -c 1 IP-ADDRESS; дараа нь
        echo "Тийм ээ, энэ нь сүлжээнд байна"
        бас
        echo "Сүлжээнд байхгүй"
        fi

        Юу болох вэ гэвэл хэрэв таны өгсөн командын буцаах утгыг аргумент болгон үнэлвэл 0-ийг буцаавал үнэн, өөр юу ч худал болно. Дөрвөлжин хаалт нь тестийн командтай тэнцүү байна. Гэхдээ та ямар ч командыг аргумент болгон дамжуулж болно (хэрэв командаар ямар нэг утга авчрах юм бол).

  10.   Баярлалаа! гэж хэлэв

    Сайн уу, би скрипт дэх X хэрэглэгчтэй скриптийг хэрхэн яаж ажиллуулах вэ, би Y хэрэглэгч үүсгэж, Y хэрэглэгч скриптийг үргэлжлүүлэн ажиллуулдаг.

    Үүнийг хийж болох уу?

  11.   Куктос гэж хэлэв

    Маш сонирхолтой, баярлалаа!

  12.   Франциско гэж хэлэв

    Хувь нэмэр оруулсанд баярлалаа, би xD-г ойлгох цаг гаргалаа, гэхдээ би ойлголоо !!!!

  13.   Элбэг гэж хэлэв

    Зохиол нь зүгээр байна. Арифметикийн хувьд, тэгтэй тэнцүү бол ($? == 0) гэж хийж болно, энэ нь сүлжээнд байхгүй, эс тэгвэл сүлжээнд байна. Хэрэв бид үүнийг арай илүү интерактив болгохыг хүсвэл дараахь зүйлийг хэлж чадна.
    echo -n IP оруулна уу:
    ip унших
    ping -c 1 $ ip

  14.   Дарин гэж хэлэв

    Сайн байцгаана уу, би үүнд их шинэлэг байна, унших замаар тийзний дугаар (үсэг, тоон) хийх гэж оролдож байгаа бөгөөд оруулсан зүйл нь зөв форматтай байвал (ABC-123456) "x" командыг гүйцэтгэхийг хүсч байна. би үүнийг яаж хийхээ мэдэхгүй байна, та надад тусалж чадах уу?

    цуурай "Тасалбар оруулах"
    унших -p тийз

    хэрэв $ ticket = "санаа байхгүй (ABC-123456 формат"); дараа нь cp file.txt $ тийз; else echo "буруу форматтай, дахин оролдоно уу"; унших -p; fi.

    Мэдээжийн хэрэг энэ нь аймшигтай бөгөөд тэд инээдэг хаха, гэхдээ миний хэлснээр би үүнийг дөнгөж эхэлж байна.

    Хэрэв би муу тайлбарлавал надад хэлээрэй, би илүү сайн хийхийг хичээдэг.

    Бүгдийг тэврээрэй.

  15.   Хамберто Ү гэж хэлэв

    Маш сайн тайлбар, мэндчилгээ