बैश: स्थितियाँ (यदि-तब-तब)

नमस्ते

इस बार मैं आपको दिखाऊंगा कि किस तरह से कंडीशन के साथ स्क्रिप्ट बनाई जाती है खूब जोर से पीटना, जिसका अनुवाद है:

यदि एक्स चीज आप चाहते हैं, तो वाई कार्रवाई की जाती है, अगर यह नहीं किया जाता है, तो एक और कार्रवाई की जाती है।

सरल व्याख्या नहीं 😀

अब, मैंने इस ट्यूटोरियल में उपयोग करने के लिए कुछ उदाहरण के बारे में कुछ मिनटों के लिए सोचा है, निम्नलिखित दुविधा / समस्या / स्थिति मेरे लिए आई है:

हम अपनी कंपनी के नेटवर्क पर हैं, और हम जानना चाहते हैं कि क्या एक्स कंप्यूटर नेटवर्क से जुड़ा है। इसके लिए हम ए लिपि आपका क्या करते हैं पिंग उस कंप्यूटर की ओर, और यदि वह एक नेटवर्क पर है (अर्थात, यदि वह वापस आ जाता है पिंग) हमें बताएगा कि हाँ, यह नेटवर्क पर है, अन्यथा (यह नेटवर्क पर नहीं है) यह हमें बताएगा कि यह नेटवर्क पर नहीं है।

एक बार यह पूरा हो जाने के बाद, अब मैं समझाऊंगा कि कैसे परिस्थितियों के साथ साइकिल चलाना है

यहाँ कोड है:

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

चिंता न करें, मैं आपको इसके बारे में विस्तार से बताऊंगा this

पिंग वह कमांड है जिसका हम उपयोग करेंगे, और यह हमें बताएगा कि क्या पीसी नेटवर्क पर है। आपको यह बताने के लिए कि हम किस पीसी पर जांचना चाहते हैं कि वह नेटवर्क पर है या नहीं, हमें बदलना होगा आईपी ​​पता स्पष्ट रूप से पीसी का आईपी पता जिसे हम जांचना चाहते हैं।

जैसा कि आप देख सकते हैं, मैंने «-सी 1«, जो हमारे लिए आवश्यक है। जब हम कंप्यूटर को पिंग करते हैं, तो यह क्रिया तब तक (पिंग) नहीं रुकती जब तक हम खुद को दबाते नहीं हैं [Ctrl] + [C], तो डाल «-सी 1»हम आपको केवल एक सत्यापन (केवल एक पिंग प्रयास) और कोई अन्य करने के लिए कहते हैं, इससे यह तुरंत बंद हो जाएगा, अर्थात ... यह जांच करेगा कि कंप्यूटर केवल एक बार नेटवर्क पर है या नहीं।

यदि आपको इस पर संदेह है, तो कोई दर्द नहीं ... वे इसे कहते हैं और मैं इसे फिर से समझाऊंगा doubts

अब चक्र आता है, क्योंकि जो मैंने अभी समझाया वह एक सामान्य कमांड / एक्शन से ज्यादा कुछ नहीं है

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

ताकि आप इसे समझें, मैं बैश, के एक अत्यंत महत्वपूर्ण विवरण की व्याख्या करूंगा

विषय के सबसे जानकार मुझे गलत या ऐसा कुछ कह सकते हैं, लेकिन हे, मैं इसे नौसिखियों या कम विशेषज्ञों के लिए लिखता हूं, जब तक वे इसे समझते हैं तब तक महान

ऐसा होता है कि में के रूप में खूब जोर से पीटना यह कुछ ऐसा है 0 y 1, अर्थात्, या तो आप जीवित हैं या आप मर चुके हैं, जब एक कमांड या कार्रवाई निष्पादित होती है: या तो अच्छी तरह से निष्पादित कोई दिक्कत नहीं है (1), एक कुछ था समस्या या त्रुटि (0).

हम एक्स एक्शन या कमांड को अंजाम देते हैं, और जो हमने किया है वह अच्छी तरह से या बुरी तरह से किया गया हो सकता है, इसमें कोई त्रुटि हो सकती है या नहीं, और यह वह जगह है जहां विवरण or है

यदि हम इस मामले में क्या करने के लिए भेजते हैं: पिंग -c 1 आईपी-ADDRESS) ने त्रुटि नहीं दी और यह सफल रहा, इसलिए यह मान लौटाएगा: 1 । अन्यथा, और यदि कार्रवाई (यानी, पिंग) सफल नहीं थी, तो यह मूल्य वापस कर देगा 0.

 और अंत में, उपरोक्त कोड का मतलब क्या है:

यदि मान 0 वापस किया गया था

पाठ प्रदर्शित करें: «नेटवर्क पर नहीं»

अन्यथा (और 0 नहीं है, लेकिन 1 लौटा है)

पाठ प्रदर्शित करें: «अगर यह नेटवर्क में है«

यह कि मैंने अभी आपको समझाया है, भविष्य में कई चीजों के लिए हमारी सेवा करेगा, क्योंकि यह कहना वास्तव में उपयोगी है कि यदि एक्स एक्शन में कोई त्रुटि दी गई है, तो वाई एक्शन करें, और यदि एक्स एक्शन ने ए नहीं दिया है तो त्रुटि, तो Z क्रिया करें।

मुझे पता है कि कुछ लोग इसमें शामिल हो सकते हैं, इसलिए मैंने इसे कई तरीकों से समझाने की कोशिश की है, हर कोई इसे एक या दूसरे तरीके से समझने की कोशिश कर रहा है। मामले में किसी को संदेह होने पर छोड़ दिया जाए, मुझे बताएं।

अब, हमारी स्क्रिप्ट बनाते हैं script

हमें इस ट्यूटोरियल में चरणों का पालन करना चाहिए: बैश: एक निष्पादन योग्य स्क्रिप्ट कैसे बनाएं

तो चलो निम्नलिखित कोड को उस फ़ाइल में कॉपी करें (स्क्रिप्ट.श), और अंत में कहते हैं «निकास"(बिना उद्धरण):

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

इसका मतलब सरल है, मैं स्पष्टीकरण लाइन को लाइन से छोड़ता हूं:

पहली पंक्ति: हम जो लिखते हैं, वह चर का मूल्य होगा «पाठ"(बिना उद्धरण)।

दूसरी पंक्ति: अगर चर की सामग्री (जो हमने अभी लिखी है) की जाँच करें 3.

पहली पंक्ति: होने के मामले में 3, यह हमें पाठ दिखाएगा «सही"(बिना उद्धरण)।

चौथी पंक्ति: अन्यथा (यदि हम 3 नहीं लिखा है तो)।

चौथी पंक्ति: यह हमें पाठ दिखाएगा «ग़लत"(बिना उद्धरण)।

चौथी पंक्ति: हालत का अंत।

जैसा कि वे महसूस करने में सक्षम हैं, अगर हम डालते हैं गूंज और फिर दोहरे कोट्स के बीच («) एक पाठ, इससे वह पाठ टर्मिनल में प्रदर्शित होगा। अगर हम कहते हैं:

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%

और अच्छी तरह से ... जोड़ने के लिए और कुछ नहीं।

यह कुछ प्राथमिक, सरल हाँ है, लेकिन फिर भी मैंने इसे यथासंभव समझाने की कोशिश की है, क्योंकि हर किसी के पास एक प्रोग्रामर की आत्मा नहीं है, और कई बार हमें इन (या समान) की स्क्रिप्ट बनाने की आवश्यकता होती है, किसी भी मामले में। आशा है कि यह लेख आपके लिए उपयोगी होगा useful

कोई संदेह या सवाल, शिकायत या सुझाव कृपया इसे यहाँ छोड़ दें, मैं ख़ुशी से आपको जवाब दूंगा और इस प्रकार, हम सभी थोड़ा और अधिक सीखते हैं complaint

सादर


26 टिप्पणियाँ, तुम्हारा छोड़ दो

अपनी टिप्पणी दर्ज करें

आपका ईमेल पता प्रकाशित नहीं किया जाएगा। आवश्यक फ़ील्ड के साथ चिह्नित कर रहे हैं *

*

*

  1. डेटा के लिए जिम्मेदार: मिगुएल elngel Gatón
  2. डेटा का उद्देश्य: नियंत्रण स्पैम, टिप्पणी प्रबंधन।
  3. वैधता: आपकी सहमति
  4. डेटा का संचार: डेटा को कानूनी बाध्यता को छोड़कर तीसरे पक्ष को संचार नहीं किया जाएगा।
  5. डेटा संग्रहण: ऑकेंटस नेटवर्क्स (EU) द्वारा होस्ट किया गया डेटाबेस
  6. अधिकार: किसी भी समय आप अपनी जानकारी को सीमित, पुनर्प्राप्त और हटा सकते हैं।

  1.   झाल कहा

    आप एक समर्थक हैं !!! * या *

    1.    KZKG ^ गारा कहा

      Nothing कुछ नहीं के लिए 😀
      अगर यह आपकी सेवा करता है और यह दिलचस्प है, तो मैं संतुष्ट हूं it

      दोस्त शुभकामनाएं

  2.   उचित कहा

    @ KZKG ^ गारा,
    बाश प्रोग्रामिंग की बात मैं एक सवाल है:
    इस VAR = हैलो की तरह एक वैरिएबल घोषित करने और इसे VAR = $ {VAR: -hello} की तरह घोषित करने में क्या अंतर है?

    मै समझाता हूँ:
    http://pastebin.com/a3cfWXeD

    अभिवादन 😉

    1.    KZKG ^ गारा कहा

      नमस्ते
      खैर, मैं बिल में एक विशेषज्ञ नहीं हूँ ... वास्तव में, मुझे कोई पता नहीं है LOL !!
      जैसा कि मैं चर की घोषणा करता हूं यह इस प्रकार है:
      : ${OPTFOLDER:="/opt/"}

      लेकिन क्योंकि मैंने हमेशा इसे इस तरह किया था, मुझे नहीं पता कि क्या अंतर ईमानदारी से हो सकता है it

  3.   उचित कहा

    @ KZKG ^ गारा
    वैसे मैंने सवाल पूछा क्योंकि सच्चाई यह है कि मुझे या तो नहीं पता था, मैं आमतौर पर स्लैकबॉडी लिखता हूं और सच्चाई यह है कि इन लिपियों में VAR1 के रूप में घोषित चर हैं। एक त्वरित Google खोज ने मुझे इस प्रश्न को स्पष्ट करने में मदद की, मैं इसे सभी के साथ साझा करता हूं ताकि हम सभी सीख सकें:

    स्क्रिप्ट:
    http://pastebin.com/faAQb35w

    स्पष्टीकरण:
    VAR = $ {VAR: -default_value} फॉर्म के वैरिएबल को घोषित करने का मतलब है कि वैरिएबल VAR वैल्यू default_value लेगा, यदि और केवल वैल्यू शून्य है या मौजूद नहीं है।

    व्यावहारिक उदाहरण:
    स्क्रिप्ट निष्पादित करते समय, इसे VAR वैरिएबल में संग्रहीत किए जाने वाले मान में दर्ज करने के लिए कहा जाता है, अगर कुछ दर्ज किया जाता है तो यह दिखाएगा कि क्या दर्ज किया गया था। यदि हम कुछ भी दर्ज नहीं करते हैं और एंटर दबाते हैं तो हम वैरिएबल VAR को शून्य घोषित कर रहे हैं, इसलिए यह value_default दिखाता है।

    नमस्ते.

    1.    KZKG ^ गारा कहा

      Haa मुझे नहीं पता था कि that
      ठीक है, बहुत बहुत धन्यवाद दोस्त ... यही मेरा मतलब है कि लेख के अंत तक, मुझे कुछ सिखाने का इरादा नहीं है और यह है, मुझे पता है कि मैं हमेशा यहां कुछ नया सीखूंगा

      एक बार फिर से बधाई और धन्यवाद।

      1.    उचित कहा

        आप सही कह रहे हैं, यहां कई चीजें सीखी जाती हैं।

        बधाई और खुश छुट्टियाँ !! 😀

  4.   लुकास मतीस कहा

    बहुत अच्छा और बेहतरीन तरीके से समझाया गया +1, समय ने आपको लिया होगा ...
    लेकिन मैं इस प्रयास के लायक हूं

    1.    KZKG ^ गारा कहा

      वास्तव में मैंने सिर्फ 80 दिन में 1% लिखा, मुझे इसे प्रकाशित करने में इतना समय लगा, क्योंकि मेरा इंटरनेट मुझे नहीं जाने देगा।
      आपकी टिप्पणी के लिए धन्यवाद 😉

  5.   ह्यूगो कहा

    इसका एक और तरीका डीएनएस का उपयोग करना है, क्योंकि कभी-कभी नेटवर्क में आईसीएमपी प्रोटोकॉल अवरुद्ध होता है:

    (होस्ट -टा IP-ADDRESS> / dev / null 2> & 1) && गूंज "नेटवर्क से जुड़ा"

    आप यह भी देखेंगे कि इस उदाहरण में रिटर्न वैल्यू चेक निहित है

    1.    KZKG ^ गारा कहा

      आप हमेशा दोस्त के रूप में, उन युक्तियों के साथ जिन्हें मैं पूरी तरह से नहीं जानता हूं।
      धन्यवाद, टिप्पणी की सराहना की है और हे ... एक और नई बात जो मैं सीखता हूं is

  6.   डाटक्स कहा

    धन्यवाद

    🙂

  7.   कोढ़ी_इवन कहा

    इस विषय के प्रकाशन को भले ही कई दिन बीत चुके हों, लेकिन इसने मुझे बहुत कुछ दिया है, अब जब मैंने एक पटकथा बनाई है .. धन्यवाद आरा ..

  8.   एडगर नवारो कहा

    Doc। मदद के लिए धन्यवाद, आपने मेरे लिए चीजें स्पष्ट कर दीं।

    बस एक क्वेरी, मैं ऐसा कैसे करूं कि जब एक कंप्यूटर अपने आप पिंग करना बंद कर दे तो दूसरा आईपी बदल देता है। मेरे पास यह है।

    आईपी ​​बदलने के लिए
    #! / Bin / bash
    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 ऊपर

  9.   अब्राहम कहा

    क्योंकि जब आप प्रश्नचिह्न का उपयोग करते हैं तो तुलना कैसे करते हैं? इसमें क्या अंतर है? कोई अन्य पत्र

    1.    KZKG ^ गारा कहा

      $? 'पिछले आउटपुट' का अर्थ है, जो कि पिछले कमांड के परिणाम के मामले में है ... '

      1.    एंड्रयू कहा

        एक ही परिणाम प्राप्त करने का एक और तरीका है, पिंग कमांड को सीधे एक तर्क के रूप में पारित करना यदि:

        अगर पिंग -c 1 आईपी-ADDRESS; फिर
        गूंज "हाँ यह नेट पर है"
        अन्य
        गूंज "नेटवर्क पर नहीं"
        fi

        क्या होता है कि यदि आप तर्क के रूप में पास होने वाले कमांड के रिटर्न मान का मूल्यांकन करते हैं, यदि यह 0 देता है तो यह सच है, और कुछ भी गलत है। वर्ग कोष्ठक परीक्षण कमांड के बराबर हैं। लेकिन आप किसी भी कमांड को एक तर्क के रूप में पारित कर सकते हैं (जब तक कि कमांड कुछ मान लौटाता है)।

  10.   सादर कहा

    नमस्कार, मैं कैसे एक script.sh निष्पादित करता हूं एक यूजर एक्स के साथ स्क्रिप्ट में मैं एक उपयोगकर्ता वाई बनाता हूं, और वह उपयोगकर्ता वाई स्क्रिप्ट को निष्पादित करना जारी रखता है।

    क्या ऐसा किया जा सकता है ??

  11.   कुकटोस कहा

    बहुत दिलचस्प है, धन्यवाद!

  12.   फ्रांसिस्को कहा

    योगदान के लिए धन्यवाद, मुझे इसे समझने में एक घंटा लगा है, लेकिन मैंने इसे समझ लिया है !!!!।

  13.   एलोय कहा

    स्क्रिप्ट ठीक है। अंकगणितीय रूप से, यह भी किया जा सकता है ($? == 0) यदि यह शून्य के बराबर है तो यह नेटवर्क पर नहीं है, अन्यथा यह नेटवर्क पर है। और अगर हम अभी भी इसे थोड़ा और इंटरेक्टिव बनाना चाहते हैं, तो हम कह सकते हैं:
    इको-एन आईपी दर्ज करें:
    आईपी ​​पढ़ें
    पिंग -c 1 $ आईपी

  14.   Dario कहा

    हैलो, मैं इसके लिए बहुत नया हूं, मैं एक रीड के माध्यम से एक टिकट नंबर (अल्फ़ान्यूमेरिक) बनाने की कोशिश कर रहा हूं और मैं चाहता हूं कि अगर जो दर्ज किया गया है उसका सही प्रारूप (एबीसी-123456) "x" कमांड निष्पादित करें और मैं डॉन ' टी पता है कि यह कैसे करना है, क्या आप मेरी मदद कर सकते हैं?

    इको "टिकट दर्ज करें"
    पढ़ें -p टिकट

    अगर $ टिकट = "कोई विचार नहीं (प्रारूप ABC-123456"); तब cp file.txt $ टिकट; "गूंज गलत स्वरूप, फिर से कोशिश करें"; पढ़ना -p; फाई।

    निश्चित रूप से यह भयानक है और वे हँसते हैं, लेकिन जैसा मैंने कहा कि मैं बस इसके साथ शुरू कर रहा हूँ।

    अगर मैं बुरी तरह समझाता हूं तो कृपया मुझे बताएं और मैं बेहतर करने की कोशिश करता हूं

    सबको गले लगाया।

  15.   हम्बर्टो वाई कहा

    उत्कृष्ट व्याख्या, अभिवादन

  16.   अगिल कहा

    मुझे थोड़ा संदेह है अगर, और और दूसरों के साथ।
    मैं एक स्क्रिप्ट चाहता हूं कि यह जांचे कि एक फ़ाइल मौजूद है (लॉग में से एक) और यदि नहीं, तो इसे बनाने के लिए और बाद में इसे लिखें। लेकिन अगर यह मौजूद है, तो मैं चाहता हूं कि आप इसे केवल लिखें।

    मेरे पास क्या है:

    दिनांक = `तारीख-आर`
    #मैं परिवर्तनीय तिथि का परीक्षण कर रहा था, जो कि a . के प्रारंभ के बीच अद्यतन नहीं है
    #प्रक्रिया और समाप्त होती है, कभी-कभी एक घंटा बीत सकता है और सही समय नहीं निकलता है।

    अगर [-f /home/user/logs/test.log];
    फिर
    स्पर्श करें /home/usuario/logs/test.log
    अन्य
    इको "$ दिनांक: अपडेट किया गया" >> /home/user/logs/test.log
    गूंज «————————————————» >> /home/user/logs/test.log
    fi

    सिद्धांत रूप में यह ठीक होना चाहिए, लेकिन वास्तविकता यह है कि यदि संदर्भित फ़ाइल पहले से मौजूद है तो इसे अपडेट नहीं किया जाता है

    1.    अगिल कहा

      क्षमा करें, मैंने देखा कि इसे भेजा नहीं गया था और यह दोगुना हो गया है