बॅश: अटी (जर-नंतर-नसेल तर)

हॅलो 😀

यावेळी मी तुम्हाला अट घालून स्क्रिप्ट कसा बनवायचा ते दाखवतो बॅश, ज्याचे भाषांतर केले आहेः

आपल्याला पाहिजे असलेली एक्स गोष्ट पूर्ण केली असल्यास, वाय क्रिया केली गेली आहे, जर ती केली नसेल तर दुसरी क्रिया केली जाईल.

साधा स्पष्टीकरण क्रमांक 😀

या ट्यूटोरियलमध्ये काही उदाहरण वापरण्यासाठी मी काही मिनिटांसाठी विचार केला आहे की, मला खालील पेच / समस्या / परिस्थिती उद्भवली:

आम्ही आमच्या कंपनीच्या नेटवर्कवर आहोत आणि एक्स संगणक नेटवर्कशी कनेक्ट केलेला आहे की नाही हे आम्हाला जाणून घ्यायचे आहे. यासाठी आम्ही एक बनवतो स्क्रिप्ट तो काय करेल असा आवाज करणे त्या संगणकाच्या दिशेने, आणि ते नेटवर्कवर असल्यास (म्हणजेच ते परत करते तर असा आवाज करणे) आम्हाला सांगेल की होय, ते नेटवर्कवर आहे, अन्यथा (म्हणजे ते नेटवर्कवर नाही) ते आम्हाला सांगते की ते नेटवर्कवर नाही.

एकदा हे पूर्ण झाल्यावर, मी आता परिस्थितीशी कसे सायकल चालवायचे हे स्पष्ट करेन

येथे कोड आहे:

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

काळजी करू नका, मी हे तुम्हाला विस्तृतपणे सांगेन 😉

असा आवाज करणे आपण वापरणार असलेली कमांड आहे आणि तो पीसी नेटवर्कवर आहे का ते आम्हाला सांगेल. नेटवर्कवर आहे की नाही हे आम्हाला कोणत्या पीसीने तपासायचे आहे हे सांगण्यासाठी आम्हाला बदलणे आवश्यक आहे IP पत्ता स्पष्टपणे, आम्ही तपासू इच्छित पीसीचा आयपी पत्ता.

आपण पाहू शकता, मी ठेवले «-सी 1आणि, जे आमच्यासाठी आवश्यक आहे. जेव्हा आम्ही संगणकाला पिंग करतो, तेव्हा आम्ही स्वतःला दाबल्याशिवाय ही क्रिया थांबत नाही (पिंग) [Ctrl] + [सी], म्हणून टाकत आहे «-सी 1»आम्ही त्याला फक्त एकच सत्यापन करण्यास सांगत आहोत (फक्त एकच पिंग प्रयत्न) आणि इतर नाही, हे त्वरित थांबेल, म्हणजेच… संगणक एकदाच नेटवर्कवर आहे का ते ते तपासेल.

आपल्याला याबद्दल शंका असल्यास, वेदना होत नाही ... ते म्हणतात आणि मी त्यांना हे पुन्हा स्पष्ट करीन 😉

आता सायकल येते, कारण मी जे स्पष्ट केले ते सामान्य आज्ञा / कृती more यापेक्षा काही अधिक नाही

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

जेणेकरुन आपणास हे समजले, मी बाशचा अत्यंत महत्वाचा तपशील सांगेन

या विषयातील सर्वात जाणकार मला चुकीचे किंवा त्यासारखे काहीतरी म्हणून चिन्हांकित करू शकतात, परंतु अहो, मी हे नवशिक्यांसाठी किंवा कमी तज्ञांसाठी लिहितो, जोपर्यंत त्यांना ते समजत नाही तोपर्यंत महान 😉

हे जसे आहे तसे होते बॅश हे असं काहीतरी आहे 0 y 1, म्हणजेच एखादी आज्ञा किंवा कृती कार्यान्वित झाल्यावर एकतर आपण जिवंत आहात किंवा आपण मेलेले आहात: एकतर चांगले अंमलात आणले काही हरकत नाही (1), किंवा तेथे काही होते समस्या किंवा त्रुटी (0).

आम्ही एक्स अ‍ॅक्शन किंवा कमांड कार्यान्वित करतो आणि जे आम्ही केले ते चांगले किंवा वाईट रीतीने केले गेले असेल कदाचित यात काही चूक झाली असेल किंवा नसेल आणि तपशील येथे आहे 😉

आम्ही काय करण्यास पाठवित असल्यास (या प्रकरणातः पिंग -c 1 आयपी-पत्ता) त्रुटी दिली नाही आणि यशस्वी झाली, म्हणून ती मूल्य परत करेल: 1 . अन्यथा आणि जर कृती (म्हणजेच पिंग) यशस्वी झाली नाही तर ती मूल्य परत करेल 0.

 आणि शेवटी, वरील कोडचा अर्थ काय आहेः

जर मूल्य 0 परत केले तर

मजकूर प्रदर्शित करा: «नेटवर्कवर नाही»

अन्यथा (आणि 0 नाही, परंतु 1 परत आला)

मजकूर प्रदर्शित करा: «ते नेटवर्कमध्ये असल्यास«

हे मी तुम्हाला नुकतेच स्पष्ट केले आहे, भविष्यात बर्‍याच गोष्टींसाठी आपली सेवा करेल, कारण हे सांगणे खरोखर उपयुक्त आहे की जर एक्स क्रियेने त्रुटी दिली असेल तर वाय कृती करा आणि जर एक्स क्रियेने त्रुटी दिली नसेल तर झेड कृती होऊ द्या.

मला माहित आहे की काही जण कदाचित थोडासा गोंधळात पडतील, म्हणून मी हे वेगवेगळ्या मार्गांनी समजावून सांगण्याचा प्रयत्न केला आहे, प्रत्येकजणास एक मार्ग किंवा दुसर्या मार्गाने समजावून सांगण्याचा प्रयत्न केला. जर कोणालाही शंका राहिल्यास मला कळवा.

आता आपण आपली स्क्रिप्ट बनवूया

आम्ही या ट्यूटोरियल मधील चरणांचे अनुसरण केले पाहिजे: बॅश: एक्जीक्यूटेबल स्क्रिप्ट कसे बनवायचे

तर त्या फाईलमध्ये खालील कोड कॉपी करूया (स्क्रिप्ट.श), आणि शेवटी म्हणू «बाहेर पडा»(कोटेशिवाय):

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

हे यासारखे दिसावे (त्यांनी लक्षात ठेवा की त्यांनी आयपी-एडीएडर्स त्यांना इच्छित असलेल्या आयपीमध्ये बदलला असावा):

येथे आपण चालणारी स्क्रिप्ट पाहू शकता:

% CODE1%

जसे आपण पाहू शकता, शेवटी तो आम्हाला सांगतो «होय ते नेटवर्कमध्ये आहे🙂 🙂

येथे महत्त्वाची गोष्ट अशी आहे की त्यांना वास्तविकतेबद्दल हे समजले आहे, म्हणून मी पुन्हा स्पष्ट करण्यासाठी आपल्याला दुसरा कोड सोडतो, परंतु दुसर्या दृष्टिकोनातून.

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

याचा अर्थ काय आहे ते सोपा आहे, मी स्पष्टीकरण ओळ एका ओळीने सोडते:

पहिली ओळ: आपण जे लिहितो तेच व्हेरिएबलचे मूल्य असेल.मजकूर पाठवणे»(कोटेशिवाय)

2 रा ओळ: व्हेरिएबलची सामग्री (आम्ही नुकतीच काय लिहितो) आहे की नाही ते तपासा 3.

पहिली ओळ: असण्याच्या बाबतीत 3, तो आम्हाला मजकूर दर्शवेल «Correcto»(कोटेशिवाय)

चौथी ओळ: अन्यथा (म्हणजेच आम्ही 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%

आणि बरं ... जोडण्यासाठी आणखी काही नाही.

ही एक प्राथमिक गोष्ट आहे, होय, होय, परंतु तरीही मी त्यास शक्य तितके स्पष्ट करण्याचा प्रयत्न केला आहे, कारण प्रत्येकाकडे प्रोग्रामरचा आत्मा नसतो आणि बर्‍याच वेळा आम्हाला या (किंवा तत्सम) सारख्या स्क्रिप्ट्स तयार करण्याची आवश्यकता असते, कोणत्याही परिस्थितीत हा लेख आपल्यासाठी उपयुक्त ठरेल अशी मला आशा आहे. कोणीतरी 🙂

कोणतीही शंका किंवा प्रश्न, तक्रार किंवा सूचना कृपया ते येथेच सोडा, मी आनंदाने तुमचे उत्तर देईन आणि अशा प्रकारे आपण सर्व थोडे अधिक शिकू 😀

कोट सह उत्तर द्या


आपली टिप्पणी द्या

आपला ई-मेल पत्ता प्रकाशित केला जाणार नाही. आवश्यक फील्ड चिन्हांकित केले आहेत *

*

*

  1. डेटा जबाबदार: मिगुएल Áन्गल गॅटन
  2. डेटाचा उद्देशः नियंत्रण स्पॅम, टिप्पणी व्यवस्थापन.
  3. कायदे: आपली संमती
  4. डेटा संप्रेषण: कायदेशीर बंधन वगळता डेटा तृतीय पक्षास कळविला जाणार नाही.
  5. डेटा संग्रहण: ओकेन्टस नेटवर्क (EU) द्वारा होस्ट केलेला डेटाबेस
  6. अधिकारः कोणत्याही वेळी आपण आपली माहिती मर्यादित, पुनर्प्राप्त आणि हटवू शकता.

  1.   झाल म्हणाले

    आपण प्रो आहात !!! *किंवा*

    1.    केझेडकेजी ^ गारा म्हणाले

      नाही काही नाही Nah
      जर त्याने तुमची सेवा दिली असेल आणि ते मजेशीर असेल तर मी समाधानी आहे 😉

      अभिवादन मित्रा

  2.   योग्य म्हणाले

    @ केझेडकेजी ^ गारा,
    बॅश प्रोग्रामिंगबद्दल बोलणे मला एक प्रश्न आहेः
    या VAR = हॅलो प्रमाणे चल घोषित करणे आणि या VAR = $ {VAR: -hello like सारखे घोषित करण्यात काय फरक आहे?

    मी समजावतो:
    http://pastebin.com/a3cfWXeD

    अभिवादन 😉

    1.    केझेडकेजी ^ गारा म्हणाले

      हॅलो 😀
      बरं, मी बॅश अजिबात तज्ज्ञ नाही ... खरं तर, मला कल्पना नाही LOL !!
      मी व्हेरिएबल्स घोषित केल्यावर ते असे आहेः
      : ${OPTFOLDER:="/opt/"}

      परंतु मी हे नेहमीच असे केल्याने मला काय माहित नाही की फरक प्रामाणिकपणे काय असू शकतो 🙁

  3.   योग्य म्हणाले

    @ केझेडकेजी ^ गारा
    बरं, मी प्रश्न विचारला कारण सत्य हे मला एकतर माहित नव्हते, मी सहसा स्लॅकबिल्ट्स लिहितो आणि सत्य म्हणजे या स्क्रिप्टमध्ये व्हीएआर 1 मधील व्हेरिएबल्स भरपूर आहेत. एका द्रुत गुगल शोधाने मला हा प्रश्न स्पष्ट करण्यास मदत केली, मी हा प्रत्येकासह सामायिक करतो जेणेकरुन आपण सर्व शिकू शकू:

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

    स्पष्टीकरणः
    VAR = {AR VAR: -default_value form फॉर्मचे व्हेरिएबल्स घोषित करणे म्हणजे व्हेरिएबल VAR व्हॅल्यू डिफॉल्ट_वेल्लू घेईल आणि फक्त व्हॅल्यू शून्य असल्यास किंवा अस्तित्त्वात नाही.

    व्यावहारिक उदाहरणः
    स्क्रिप्ट कार्यान्वित करताना, व्हीएआर व्हेरिएबलमध्ये संग्रहित करण्यासाठी एक मूल्य प्रविष्ट करण्याची विनंती केली जाते, जर काही प्रविष्ट केले तर ते काय प्रविष्ट केले ते दर्शवेल. जर आपण काहीही प्रविष्ट केले नाही आणि एंटर दाबा तर आपण व्हेरिएबल VAR रिकामी घोषित करत आहोत, म्हणून हे व्हॅल्यू_डिफॉल्ट दर्शविते.

    ग्रीटिंग्ज

    1.    केझेडकेजी ^ गारा म्हणाले

      हाहा मला ते माहित नव्हते 😀
      ठीक आहे, आभारी आहे मित्रा ... लेखाच्या शेवटी मला हेच म्हणायचे होते, मला काही शिकवण्याचा माझा हेतू नाही आणि हेच आहे, मला माहित आहे की मी येथे काहीतरी नवीन शिकत आहे 😀

      पुन्हा एकदा शुभेच्छा आणि धन्यवाद.

      1.    योग्य म्हणाले

        आपण बरोबर आहात, येथे अनेक गोष्टी शिकतात.

        शुभेच्छा आणि सुट्टीच्या शुभेच्छा !! 😀

  4.   लुकास मॅटियास म्हणाले

    खूप चांगले आणि उत्कृष्टपणे स्पष्ट केले +1, ज्यावेळेस तो तुम्हाला घेईल ...
    पण मी प्रयत्न वाचतो 😉

    1.    केझेडकेजी ^ गारा म्हणाले

      मी प्रत्यक्षात फक्त एका दिवसात %०% लिहिले आहे, मला फक्त इतके वेळ लागला की माझे इंटरनेट मला परवानगी देत ​​नाही म्हणून हे पोस्ट करायला.
      आपल्या टिप्पणीबद्दल धन्यवाद 😉

  5.   ह्युगो म्हणाले

    डीएनएस वापरण्याचे आणखी एक मार्ग म्हणजे, कधीकधी नेटवर्कमध्ये आयसीएमपी प्रोटोकॉल अवरोधित असतो:

    (होस्ट -ta आयपी-DRESSड्रेस> / dev / null 2> & 1) && "नेटवर्कशी कनेक्ट केलेले" प्रतिध्वनी

    आपणास हे देखील लक्षात येईल की या उदाहरणात परतावा मूल्य तपासणी अंतर्भूत आहे 😉

    1.    केझेडकेजी ^ गारा म्हणाले

      आपण नेहमीच मित्र आहात अशा टिपांसह ज्या मला पूर्णपणे हाहाबा माहित नाहीत.
      धन्यवाद, टिप्पणी कौतुक आहे आणि हे… मी शिकत असलेली आणखी एक नवीन गोष्ट 😀

  6.   डेटाक्स म्हणाले

    धन्यवाद

    🙂

  7.   कुष्ठरोगी म्हणाले

    जरी या विषयाच्या प्रकाशनास कित्येक दिवस उलटून गेले असले तरी याने मला खूप मदत केली आहे, आता मी बॅशमध्ये स्क्रिप्ट बनविली आहे .. धन्यवाद गं ..

  8.   एडगर नॅवरो म्हणाले

    डॉक्टर, तू माझ्यासाठी गोष्टी स्पष्ट केल्या त्या मदतीबद्दल धन्यवाद.

    फक्त एक क्वेरी, मी असे कसे करावे जेणेकरून जेव्हा एखादा संगणक स्वयंचलितपणे पिंग करणे थांबवितो तेव्हा दुसरा आयपी बदलतो. हे माझ्याकडे आहे.

    आयपी बदलण्यासाठी
    #! / बिन / बॅश
    पिंग-सी 10 192.168.1.50 # जर ते स्वयंचलितपणे पिंग होत नसेल
    ifconfig eth0 192.168.1.50 नेटमास्क 255.255.255.0 प्रसारण 192.168.1.0
    ifconfig एथ 0 खाली
    ifconfig eth0 अप

  9.   अब्राहाम म्हणाले

    कारण जर आपण प्रश्न चिन्ह वापरत असाल तर तुलना करता तेव्हा? ठेवण्यामध्ये काय फरक आहे? इतर कोणतेही पत्र

    1.    केझेडकेजी ^ गारा म्हणाले

      $? म्हणजे 'मागील आउटपुट किंवा आउटपुट', म्हणजेच मागील कमांडचा परिणाम ... 🙂

      1.    आंद्रे म्हणाले

        समान परिणाम साध्य करण्याचा आणखी एक मार्ग आहे, पिंग कमांड थेट वितर्क म्हणून दिली तर:

        जर पिंग -c 1 आयपी-ADDRESS; मग
        एको "हो नेट वर आहे"
        आणखी
        एन्को "नेटवर्कवर नाही"
        fi

        काय होते ते म्हणजे आपण अर्ग्युमेंट म्हणून पास केलेल्या कमांडच्या रिटर्न व्हॅल्यूचे मूल्यांकन केल्यास जर ते 0 परत आले तर ते खरे आहे, इतर काहीही चुकीचे आहे. स्क्वेअर ब्रॅकेट्स चाचणी कमांडच्या बरोबरीने असतात. परंतु आपण कोणतीही आदेश वितर्क म्हणून पास करू शकता (जोपर्यंत कमांडने काही मूल्य दिले तर).

  10.   कोट सह उत्तर द्या म्हणाले

    हॅलो, मी एक स्क्रिप्ट मध्ये एक यूजर एक्स सह स्क्रिप्ट.श कसे कार्यान्वित करू. मी एक यूजर वाई तयार करतो आणि तो युजर वाई स्क्रिप्टची अंमलबजावणी करत आहे.

    हे करता येईल का ??

  11.   कुक्तोस म्हणाले

    खूप मनोरंजक, धन्यवाद!

  12.   फ्रॅनसिसको म्हणाले

    योगदानाबद्दल धन्यवाद, मी हे समजून घेण्यासाठी एक तास झाला आहे एक्सडी, परंतु मला ते समजले !!!!

  13.   Eloy म्हणाले

    स्क्रिप्ट ठीक आहे. अंकगणिताने ते ($? == 0) म्हणून देखील केले जाऊ शकते जर ते शून्याइतके असेल तर ते नेटवर्कवर नाही, अन्यथा ते नेटवर्कवर आहे. आणि तरीही आपण त्यास थोडे अधिक परस्परसंवादी बनवायचे असल्यास आपण असे म्हणू शकतो:
    प्रतिध्वनी प्रविष्ट करा:
    आयपी वाचा
    पिंग -c 1 ip

  14.   डायरियो म्हणाले

    हॅलो, मी यात अगदीच नवीन आहे, मी वाचनातून तिकीट क्रमांक (अक्षरांक) बनविण्याचा प्रयत्न करीत आहे आणि मला असे पाहिजे आहे की जर एंटर केले असेल तर योग्य फॉर्मेट (एबीसी -123456) "x" कमांड कार्यान्वित करेल. आणि हे कसे करावे हे मला माहित नाही, आपण मला मदत करू शकाल?

    एको करा "तिकिट प्रविष्ट करा"
    वाचून-तिकीट

    जर $ तिकीट = "नाही कल्पना (एबीसी -123456 स्वरूप"); नंतर सीपी file.txt $ तिकिट; अन्यथा "चुकीचे स्वरूप, पुन्हा प्रयत्न करा" असे प्रतिध्वनी; वाचा -पी; फाय.

    निश्चितच ते भयानक आहे आणि ते हसतात, परंतु मी म्हटल्याप्रमाणे मी यापासून प्रारंभ करीत आहे.

    मी वाईटरित्या स्पष्टीकरण दिल्यास कृपया मला सांगा आणि मी अधिक चांगले करण्याचा प्रयत्न करतो.

    सर्वांना मिठी मार.

  15.   हंबर्टो वाय म्हणाले

    उत्कृष्ट स्पष्टीकरण, अभिवादन

  16.   चपळ म्हणाले

    मला if, else आणि इतरांबद्दल थोडी शंका आहे.
    फाइल अस्तित्त्वात आहे हे तपासण्यासाठी (लॉगपैकी एक) आणि नसल्यास, ती तयार करण्यासाठी आणि नंतर त्यावर लिहिण्यासाठी मला स्क्रिप्ट हवी आहे. पण जर ते अस्तित्वात असेल, तर तुम्ही त्यावर लिहावे अशी माझी इच्छा आहे.

    माझ्याकडे जे आहे ते आहे:

    तारीख = `तारीख -R`
    #मी व्हेरिएबल तारखेची चाचणी करत होतो, जी अ च्या सुरूवातीच्या दरम्यान अपडेट केलेली नाही
    #प्रक्रिया आणि संपते, कधीकधी एक तास निघून जातो आणि योग्य वेळ येत नाही.

    जर [-f /home/user/logs/test.log];
    नंतर
    /home/usuario/logs/test.log ला स्पर्श करा
    आणखी
    echo "$ date: Updated" >> /home/user/logs/test.log
    इको «————————————————-» >> /home/user/logs/test.log
    fi

    सिद्धांततः ते ठीक असले पाहिजे, परंतु वास्तविकता अशी आहे की संदर्भित फाइल आधीपासूनच अस्तित्वात असल्यास ती अद्यतनित केली जात नाही

    1.    चपळ म्हणाले

      क्षमस्व, मी पाहिले की ते पाठवले गेले नाही आणि ते दुप्पट झाले आहे