ბაშური: პირობები (სხვა შემთხვევაში)

გამარჯობა

ამჯერად მე გაჩვენებთ თუ როგორ უნდა გააკეთოთ სკრიპტი პირობითად Bash, რომელიც თარგმნილია:

თუ შესრულებულია X რამ, რაც გსურთ, შესრულებულია Y მოქმედება, თუ ის არ გაკეთებულა, გაკეთებულია სხვა მოქმედება.

მარტივი განმარტება არა

რამდენიმე წუთის განმავლობაში ვფიქრობდი რამდენიმე მაგალითზე, რომელიც გამოვიყენე ამ სახელმძღვანელოში, შემდეგი დილემა / პრობლემა / სიტუაცია გამიჩნდა:

ჩვენ ვართ ჩვენი კომპანიის ქსელში და გვინდა ვიცოდეთ არის თუ არა X კომპიუტერი ქსელში ჩართული. ამისათვის ჩვენ ვამზადებთ ა script რას იზამს Ping ამ კომპიუტერისკენ და თუ ის ქსელშია (ეს არის თუ ის დააბრუნებს Ping) გვეტყვის, რომ დიახ, ის არის ქსელში, წინააღმდეგ შემთხვევაში (ეს არ არის ქსელში) გვეტყვის, რომ ეს ქსელში არაა.

ამის გაკეთების შემდეგ, ახლა მე აგიხსნით, თუ როგორ უნდა ველოსიპედით პირობები

აქ არის კოდი:

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

არ ინერვიულო, ამას დაწვრილებით აგიხსნი

Ping არის ბრძანება, რომელსაც გამოვიყენებთ და გვეტყვის, არის თუ არა ეს კომპიუტერი ქსელში. რომ გითხრათ რომელი კომპიუტერი გვინდა გადავამოწმოთ არის თუ არა ის ქსელში, უნდა შეიცვალოს IP მისამართი ცხადია, კომპიუტერის 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-ADDRESS) არ მისცა შეცდომა და წარმატებული იყო, ასე რომ დაგიბრუნებთ მნიშვნელობას: 1 . წინააღმდეგ შემთხვევაში, და თუ მოქმედება (ანუ პინგ) არ იყო წარმატებული, ის დაუბრუნებს მნიშვნელობას 0.

 დაბოლოს, რას ნიშნავს ეს კოდი არის შემდეგი:

თუ 0 მნიშვნელობა დაუბრუნდა მაშინ

ტექსტის ჩვენება: «არა ქსელში»

წინააღმდეგ შემთხვევაში (და დააბრუნეთ არა 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– ით):

აქ შეგიძლიათ ნახოთ გაშვებული სკრიპტი:

% კოდი 1%

 

როგორც ხედავთ, ბოლოს ის გვეუბნება «დიახ, ის ქსელშია»

აქ მთავარია, რომ მათ რეალურად ესმით ეს პირობები, ამიტომ მე სხვა კოდს ვტოვებ, რომ კვლავ ახსნა, მაგრამ სხვა თვალსაზრისით.

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

ეს რას ნიშნავს, მარტივია, მე ახსნას ხაზს ვტოვებ ხაზით:

პირველი ხაზი: რასაც ვწერთ, ეს იქნება ცვლადის მნიშვნელობა «ტექსტი»(ბრჭყალების გარეშე).

მე -2 ხაზი: შეამოწმეთ არის თუ არა ცვლადის შინაარსი (რაც ახლახანს დავწერეთ) 3.

პირველი ხაზი: არსებობის შემთხვევაში 3, ეს გვაჩვენებს ტექსტს «უფლება»(ბრჭყალების გარეშე).

მე -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

როგორ მუშაობს სკრიპტი:

% კოდი 2%

 

და კარგი ... მეტი არაფერი რომ დაამატო.

ეს არის ელემენტარული, მარტივი, დიახ, მაგრამ მაინც ვეცადე ამის ახსნა მაქსიმალურად კარგად, რადგან ყველას არ აქვს პროგრამისტის სული და ბევრჯერ გვჭირდება ასეთი (ან მსგავსი) სკრიპტების გაკეთება, ნებისმიერ შემთხვევაში მე იმედი მაქვს, რომ ეს სტატია ვინმესთვის გამოგადგებათ

ნებისმიერი ეჭვი ან კითხვა, საჩივარი ან წინადადება გთხოვთ, დატოვეთ აქ, მე სიამოვნებით გიპასუხებთ და, ამრიგად, ყველამ ცოტა მეტი ვისწავლოთ

დაკავშირებით


სტატიის შინაარსი იცავს ჩვენს პრინციპებს სარედაქციო ეთიკა. შეცდომის შესატყობინებლად დააჭირეთ ღილაკს აქ.

26 კომენტარი დატოვე შენი

დატოვე კომენტარი

თქვენი ელფოსტის მისამართი გამოქვეყნებული არ იყო.

*

*

  1. მონაცემებზე პასუხისმგებელი: მიგელ ანგელ გატონი
  2. მონაცემთა მიზანი: სპამის კონტროლი, კომენტარების მართვა.
  3. ლეგიტიმაცია: თქვენი თანხმობა
  4. მონაცემთა კომუნიკაცია: მონაცემები არ გადაეცემა მესამე პირებს, გარდა სამართლებრივი ვალდებულებისა.
  5. მონაცემთა შენახვა: მონაცემთა ბაზა, რომელსაც უმასპინძლა Occentus Networks (EU)
  6. უფლებები: ნებისმიერ დროს შეგიძლიათ შეზღუდოთ, აღადგინოთ და წაშალოთ თქვენი ინფორმაცია.

  1.   ჯალები დიჯო

    თქვენ ხართ პროფესიონალი !!! * ან *

    1.    KZKG ^ გაუარა დიჯო

      არაფრისთვის
      თუ ის მოგემსახურათ და საინტერესოა, კმაყოფილი ვარ

      გამარჯობა მეგობარო

  2.   სათანადო დიჯო

    @ KZKG ^ გაუარა,
    bash პროგრამირებაზე საუბრისას მაქვს კითხვა:
    რა განსხვავებაა ამგვარი VAR = hello- ს ცვლადის გამოცხადებასა და მის ასე გამოცხადებაში VAR = $ {VAR: -hello}?

    მე ავუხსენი:
    http://pastebin.com/a3cfWXeD

    მისალოცი

    1.    KZKG ^ გაუარა დიჯო

      გამარჯობა
      ისე, მე საერთოდ არ ვარ ბაშის ექსპერტი ... სინამდვილეში, წარმოდგენა არ მაქვს LOL !!
      როგორც ცვლადებს ვაცხადებ, ასე გამოიყურება:
      : ${OPTFOLDER:="/opt/"}

      რადგან მე ყოველთვის ასე ვაკეთებდი, არ ვიცი რა განსხვავება შეიძლება იყოს გულწრფელად

  3.   სათანადო დიჯო

    @ KZKG ^ გაუარა
    მე დავსვი კითხვა, რადგან სიმართლე ის არის, რომ არც მე ვიცოდი, მე ჩვეულებრივ ვწერ SlackBuilds– ს და სიმართლე ისაა, რომ ამ სკრიპტებში ბევრია გამოცხადებული ცვლადები. Google- ის სწრაფი ძებნა დამეხმარა ამ საკითხის გარკვევაში, მე ყველას ვუზიარებ ისე, რომ ყველამ ვისწავლოთ:

    სცენარი:
    http://pastebin.com/faAQb35w

    ახსნა:
    ფორმის ცვლადების გამოცხადება VAR = $ {VAR: -default_value} ნიშნავს, რომ ცვლადი VAR მიიღებს მნიშვნელობას default_value, თუ მხოლოდ იმ შემთხვევაში, თუ მნიშვნელობა არის null ან არ არსებობს.

    პრაქტიკული მაგალითი:
    სკრიპტის შესრულებისას, მას სთხოვენ შეიყვანოთ მნიშვნელობა, რომელიც უნდა შეინახოს VAR ცვლადში, თუ რამეა შეყვანილი, ის აჩვენებს თუ რა შეიტანეს. თუ ჩვენ არ ჩავთვლით ვერაფერს და დააჭირეთ enter- ს, ჩვენ გამოვცხადებთ ცვლადს VAR- ს, როგორც null, ამიტომ იგი აჩვენებს მნიშვნელობას_შედეგად.

    ულოცავენ.

    1.    KZKG ^ გაუარა დიჯო

      HAHA მე ეს არ ვიცოდი
      კარგი, დიდი მადლობა მეგობარო ... სტატიის ბოლოს ვგულისხმობდი, მე არ ვაპირებ რაღაცის სწავლებას და ეს არის ის, რომ ვიცი აქ ყოველთვის ვისწავლი ახალ რაღაცებს

      კიდევ ერთხელ მოგესალმებით.

      1.    სათანადო დიჯო

        მართალი ხარ, აქ რამდენიმე რამეს გაიგებს.

        გილოცავ და გილოცავ არდადეგებს !! 😀

  4.   ლუკას მათიასი დიჯო

    შესანიშნავი და შესანიშნავად ახსნილი +1, დრო დაგჭირდება ...
    მაგრამ მე ღირს ძალისხმევა

    1.    KZKG ^ გაუარა დიჯო

      სინამდვილეში მე დავწერე 80% მხოლოდ 1 დღეში, ამდენი დრო დამჭირდა მის გამოქვეყნებაზე, მხოლოდ იმიტომ, რომ ინტერნეტი არ მაძლევდა საშუალებას.
      გმადლობთ კომენტარისთვის

  5.   უგო დიჯო

    ამის გაკეთების კიდევ ერთი გზაა DNS- ის გამოყენება, რადგან ზოგჯერ ქსელებს აქვთ დაბლოკილი ICMP პროტოკოლი:

    (მასპინძელი –ta IP-ADDRESS> / dev / null 2> & 1) && echo "დაკავშირებულია ქსელთან"

    თქვენ ასევე შეამჩნევთ, რომ ამ მაგალითში დაბრუნებული მნიშვნელობის შემოწმება იგულისხმება

    1.    KZKG ^ გაუარა დიჯო

      შენ როგორც ყოველთვის მეგობარო, რჩევებით, რომლებიც მე არ ვიცი მთლად HAHAHA.
      გმადლობთ, კომენტარი დასაფასებელია და ჰეჰ ... კიდევ ერთი ახალი რამ, რასაც ვსწავლობ

  6.   დატუქსი დიჯო

    მადლობა

    🙂

  7.   კეთროვანი_ივან დიჯო

    მიუხედავად იმისა, რომ ამ თემის გამოქვეყნებიდან რამდენიმე დღე გავიდა, ეს ძალიან მომეხმარა, ახლა კი bash- ში გავაკეთე სცენარი .. მადლობა გაუარას ..

  8.   ედგარ ნავარო დიჯო

    Doc. გმადლობთ იმ დახმარებისთვის, რომელიც ჩემთვის გასაგები გახდით.

    მხოლოდ შეკითხვაზე, როგორ მოვიქცე ისე, რომ როდესაც ერთი კომპიუტერი ავტომატურად აჩერებს სხვებს, სხვა შეცვლის IP- ს. Მე მაქვს ეს.

    შეცვალოს IP
    #! / ბინ / ბაში
    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 up

  9.   აბრაამი დიჯო

    რადგან კითხვის ნიშნის გამოყენებასთან შედარებით? რა განსხვავებაა? ნებისმიერი სხვა წერილი

    1.    KZKG ^ გაუარა დიჯო

      $? ნიშნავს "წინა გამომავალს ან გამომავალს", ანუ იმ შემთხვევაში, თუ წინა ბრძანების შედეგია ...

      1.    ანდრია დიჯო

        იგივე შედეგის მისაღწევად არსებობს კიდევ ერთი გზა, პინგ ბრძანების გადაცემა პირდაპირ არგუმენტად თუ:

        თუ ping -c 1 IP-ADDRESS; შემდეგ
        ექო "დიახ, ის ქსელშია"
        სხვა
        ექო "არა ქსელში"
        fi

        რა ხდება, რომ თუ შეაფასებს ბრძანების დაბრუნების მნიშვნელობას, რომელსაც არგუმენტად გადასცემთ, თუ იგი 0 დააბრუნებს, ეს მართალია, სხვა ყველაფერი მცდარია. კვადრატული ფრჩხილები ექვივალენტურია ტესტი ბრძანების. მაგრამ თქვენ შეგიძლიათ ნებისმიერი ბრძანების არგუმენტად გადაცემა (რამდენადაც ბრძანება დააბრუნებს გარკვეულ მნიშვნელობას).

  10.   დაკავშირებით დიჯო

    გამარჯობა, როგორ შემიძლია შევასრულო სკრიპტი.შ სკრიპტის მომხმარებელ X- ით, მე ვქმნი მომხმარებელს Y, და ეს მომხმარებელი Y განაგრძობს სკრიპტის შესრულებას .sh

    ამის გაკეთება შეიძლება ??

  11.   კუკტოსი დიჯო

    ძალიან საინტერესო, მადლობა!

  12.   Francisco დიჯო

    მადლობა შეწირვისთვის, მე ერთი საათი ვიყავი, რომ მესმოდა xD, მაგრამ მე ეს გამეგო !!!!.

  13.   ელოი დიჯო

    სცენარი მშვენიერია. არითმეტიკულად, ეს შეიძლება გაკეთდეს როგორც ($? == 0), თუ იგი ნულის ტოლია, ის არ არის ქსელში, წინააღმდეგ შემთხვევაში ის ქსელშია. და თუ მაინც გვსურს ცოტა უფრო ინტერაქტიული გავხადოთ, შეგვიძლია ვთქვათ:
    echo -n შეიყვანეთ IP:
    წაიკითხეთ ip
    ping -c 1 $ ip

  14.   Dario დიჯო

    გამარჯობა, მე ძალიან ახალი ვარ ამასთან დაკავშირებით, ვცდილობ ბილეთის ნომერი (ალფანუმერული) გავაკეთო წაკითხულის საშუალებით და მსურს, თუ შეყვანილს აქვს სწორი ფორმატი (ABC-123456) შეასრულოს "x" და მე არა ვიცი როგორ უნდა გავაკეთოთ, იქნებ დამეხმაროთ?

    echo "შეიყვანეთ ბილეთი"
    წაიკითხეთ -p ბილეთი

    თუ $ ბილეთი = "იდეა არ არის (ფორმატი ABC-123456"); შემდეგ cp file.txt $ ბილეთი; other echo "არასწორი ფორმატი, ისევ სცადე"; წაიკითხეთ -p; ფი

    რა თქმა უნდა, ეს საშინელებაა და იცინიან ჰაჰა, მაგრამ, როგორც ვთქვი, ახლა ამით ვიწყებ.

    თუ ცუდად ავუხსენი, გთხოვთ მითხრათ და ვცდილობ უკეთესად მოვიქცე.

    ყველას ჩაეხუტე.

  15.   ჰუმბერტო ი დიჯო

    შესანიშნავი განმარტება, მოგესალმებით

  16.   სწრაფი დიჯო

    ცოტა ეჭვი მეპარება თუ, სხვაში და სხვებში.
    მინდა სკრიპტი შევამოწმო, რომ ფაილი არსებობს (ერთ-ერთი ჟურნალი) და თუ არა, შევქმნა და მოგვიანებით დავწერო. მაგრამ თუ ის არსებობს, მე მინდა, რომ უბრალოდ მისწერო.

    რაც მე მაქვს არის:

    თარიღი = `თარიღი -R`
    #მე ვამოწმებდი ცვლადის თარიღს, რომელიც არ განახლდება ა-ს დაწყებიდან
    #პროცესი და მთავრდება, ხანდახან შეიძლება ერთი საათი გავიდეს და სწორი დრო არ გამოდის.

    თუ [-f /home/user/logs/test.log];
    მაშინ
    შეეხეთ /home/usuario/logs/test.log
    სხვა
    echo "$ date: განახლებულია" >> /home/user/logs/test.log
    echo «———————————————-» >> /home/user/logs/test.log
    fi

    თეორიულად კარგი უნდა იყოს, მაგრამ რეალობა ისაა, რომ არ განახლდება, თუ მითითებული ფაილი უკვე არსებობს

    1.    სწრაფი დიჯო

      ბოდიში, ვნახე რომ არ იყო გაგზავნილი და გაორმაგდა