किसी भी कार्यक्रम में उपयोगी शेल स्क्रिप्ट

खूब जोर से पीटना यह एक कंप्यूटर प्रोग्राम है जिसका कार्य आदेशों की व्याख्या करना है। यह के खोल पर आधारित है यूनिक्स और परियोजना के लिए लिखा गया था जीएनयू अधिकांश वितरणों में डिफ़ॉल्ट शेल होना ग्नू / लिनक्स। उनके नाम के लिए एक संक्षिप्त नाम है बोर्न अगेन शैल (एक और शेल बॉर्न)शब्दों पर नाटक बनाना (जन्म-पुन: पुनर्जन्म का अर्थ है) पर बॉर्न शेल (sh), जो पहले प्रमुख यूनिक्स दुभाषियों में से एक था।

आज हम कुछ शेल स्क्रिप्ट दिखाने जा रहे हैं जो डेवलपर्स के लिए बहुत उपयोगी हो सकते हैं। अधिकांश किसी भी शेल में काम करते हैं यूनिक्स, हालांकि कुछ के लिए आवश्यक है कि वे विशेष रूप से निष्पादित हों खूब जोर से पीटना.

गैर-विशेषाधिकार प्राप्त उपयोगकर्ताओं को स्क्रिप्ट चलाने से रोकें

कुछ स्क्रिप्ट प्रशासनिक कार्य करते हैं इसलिए हम स्क्रिप्ट चलाने के लिए केवल रूट उपयोगकर्ता चाहते हैं। उस मामले में हम कुछ इस तरह का उपयोग कर सकते हैं:

#!/bin/bash
if [[ $EUID -ne 0 ]]; then
echo "Este script debe ser ejecutado por el usuario root" 1>&2
exit 1
fi

केवल एक विशिष्ट उपयोगकर्ता के लिए स्क्रिप्ट निष्पादन की अनुमति दें

उपरोक्त कोड के समान, हम स्क्रिप्ट चलाने के लिए केवल एक विशिष्ट उपयोगकर्ता चाहते हैं। हम ऐसा करते हैं:

#!/bin/bash
AUTHORIZED_USER="usuario_permitido"
if [ $USER != $AUTHORIZED_USER ]; then
echo "Este script debe ser ejecutado por el usuario $AUTHORIZED_USER" 1>&2
exit 1
fi

सत्यापित करें कि कोई सेवा / प्रक्रिया चल रही है

यदि हम यह जानना चाहते हैं कि क्या किसी सेवा या कार्यक्रम की प्रक्रिया चल रही है तो हम इस स्क्रिप्ट का उपयोग कर सकते हैं (इस मामले में यह पुष्टि करता है कि अपाचे दौड रहा है):

#!/bin/sh
SERVICE='httpd'
if ps ax | grep -v grep | grep $SERVICE > /dev/null
then
echo "El servicio $SERVICE esta ejecutandose"
else
echo "Chanfle! El servicio $SERVICE esta detenido"
fi

एक लॉक फ़ाइल बनाएँ

कभी-कभी हमें यह सुनिश्चित करना चाहिए कि स्क्रिप्ट दो या अधिक बार एक साथ नहीं चलती है। इसके लिए हम लॉक फ़ाइलों का उपयोग कर सकते हैं। यह एक स्क्रिप्ट का एक सरल संस्करण है जो हमें ऐसा करने की अनुमति देता है:

#!/bin/bash
lockfile=/var/lock/loquesea.lock
if [ ! -e $lockfile ]; then
touch $lockfile
echo "hago muchas cosas importantes aqui"
rm $lockfile
else
echo "ya hay otro proceso corriendo"
fi

इस स्थिति में, यह सत्यापित किया जाता है कि फ़ाइल जो भी हो मौजूद। यदि यह मौजूद है, तो स्क्रिप्ट अपने कार्यों को निष्पादित नहीं करती है। यदि यह मौजूद नहीं है, तो यह फ़ाइल बनाता है, इसे चलाने के लिए आवश्यक कार्यों को चलाता है और इसे हटा देता है। लेकिन, यह पूरी तरह से विश्वसनीय नहीं है। यदि हमारी स्क्रिप्ट चल रही है तो अचानक बंद होने पर क्या होगा?

उस स्थिति में लॉक फ़ाइल को हटाया नहीं जाएगा, और इसलिए यह हमें स्क्रिप्ट को फिर से चलाने की अनुमति नहीं देगा। उन मामलों को कवर करने के लिए, हम ट्रैप कमांड का उपयोग कर सकते हैं जो हमें हमारी स्क्रिप्ट को अप्रत्याशित रूप से समाप्त होने की स्थिति में कमांड निष्पादित करने की अनुमति देता है। यह एक और अधिक उन्नत संस्करण है जो स्क्रिप्ट की पीआईडी ​​को बचाता है जो इसे लॉक फ़ाइल के भीतर निष्पादित करता है:

#!/bin/bash
lockfile=/var/lock/loquesea.lock
if ( set -o noclobber; echo "$$" > "$lockfile") 2> /dev/null;
then
trap 'rm -f "$lockfile"; exit $?' INT TERM EXIT
echo "hago muchas cosas aqui tranquilamente"
rm -f "$lockfile"
trap - INT TERM EXIT
else
echo "Ya hay otro proceso de este script ejecutandose"
echo "corriendo con el PID: $(cat $lockfile)"
fi

चलिए कमांड को थोड़ा बेहतर समझते हैं जाल। इसका सिंटैक्स मूल रूप से यह है: ट्रैप कमांड सिग्नल [सिग्नल…]; जहां सिग्नल समाप्ति संकेत है जिसे आप पकड़ना चाहते हैं। यदि आप उपलब्ध संकेतों की एक सूची देखना चाहते हैं तो आप कमांड किल -l चला सकते हैं। पिछले मामले के लिए, INT संकेतों का उपयोग किया गया था (Ctrl + c द्वारा निर्मित समाप्ति पर कब्जा करता है), टर्म (किल कमांड द्वारा निर्मित समाप्ति) और बाहर निकलें (स्क्रिप्ट का सामान्य समापन, या तो क्योंकि चलाने के लिए और अधिक लाइनें नहीं हैं या क्योंकि यह निकास कमान के पार है).

विकल्प मेनू

एक मेनू बनाने के लिए जहां हम उपयोगकर्ता को विकल्पों की एक श्रृंखला का चयन करने की अनुमति देते हैं, हम निम्नलिखित योजना का उपयोग कर सकते हैं:

#!/bin/bash
clear
while :
do
echo " Escoja una opcion "
echo "1. quien soy?"
echo "2. cuanto espacio tengo"
echo "3. que es esto?"
echo "4. Salir"
echo -n "Seleccione una opcion [1 - 4]"
read opcion
case $opcion in
1) echo "este eres:";
whoami;;
2) echo "tienes esto";
df;;
3) uname -r;;
4) echo "chao";
exit 1;;
*) echo "$opc es una opcion invalida. Es tan dificil?";
echo "Presiona una tecla para continuar...";
read foo;;
esac
done

स्क्रिप्ट चलाने से पहले पुष्टि के लिए पूछें

कभी-कभी उपयोगकर्ता को बयानों के एक बैच के निष्पादन की पुष्टि करना उपयोगी होता है, अर्थात, वह विशिष्ट संदेश जो उपयोगकर्ता को हां या नहीं टाइप करने के लिए कहता है। हम इसे इस तरह से कर सकते हैं:

#!/bin/bash
while true; do
echo
read -p "esta seguro de hacer lo que sea que vaya a hacer " yn
case $yn in
yes ) break;;
no ) exit;;
* ) echo "por favor responda yes o no";;
esac
done
echo "si se ejecuta esto es que aceptaste"

लेख का अंत। बस महान 😀

संपादकीय: आपको रिक्त स्थान और टैब से सावधान रहना होगा, जो किसी कारण से with नहीं निकल रहे हैं


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

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

*

*

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

  1.   KZKG ^ गारा कहा

    भाड़ में जाओ वे महान O_O हैं ... यह मेरी छोटी चीजों को बहुत मदद करेगा जो मैं बैश में करता हूं

  2.   ren434 कहा

    पटकथाएं सुपर हैं! क्या एक महान योगदान गंभीरता से, बस मैं क्या देख रहा था।

    पुनश्च: मंच नीचे है।

    1.    KZKG ^ गारा कहा

      हाँ, सर्वर जहाँ फ़ोरम माउंट किया गया है वह ऑफ़लाइन है, पता नहीं क्यों ... हमने उस मित्र को एक ईमेल लिखा है जो उसका ख्याल रखता है, यह देखने के लिए कि वह हमारे लिए क्या प्रतिक्रिया देता है the

      नमस्ते.

  3.   ren434 कहा

    ओह ठीक है, चलो आशा है कि यह कुछ भी गंभीर नहीं है।

  4.   खब्बा कहा

    क्या वह "चफ" कोड निंजा में भी शामिल था? एक्सडी

  5.   तारेगना कहा

    मुझे बैश b की शक्ति पसंद है और उन्होंने मुझे बताया कि सी भाषा क्या थी ... क्योंकि शेल स्क्रिप्ट में कई परिचित कमांड हैं।

  6.   क्रिस्टोफर कहा

    धन्यवाद, मुझे वास्तव में पसंद आया

  7.   देवदूत कहा

    इनपुट मापदंडों का सत्यापन बहुत उपयोगी है। मुझे नहीं पता था कि मेनू कैसे बनाया जाता है =)

  8.   हियुगा _Nनेजी कहा

    महान…। अब मैं अपनी स्क्रिप्ट चुरोस लोल को कुछ "कठोरता" दे सकता हूं

  9.   काला कौआ कहा

    कोडिन्जा में हमारा विनम्र काम अंतरराष्ट्रीय लाइनक्स समुदाय को कैसे काम करता है, यह देखने के लिए एक बड़ी खुशी है

    1.    KZKG ^ गारा कहा

      स्पष्ट! 🙂
      सब कुछ मदद करना है और एक साथ योगदान करना है, और आग की लपटें पैदा करना नहीं है, है ना? 😉

  10.   डिएगो कहा

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

    #! / Bin / bash
    इको "एक सेवा चुनें"
    सेवा पढ़ें
    # सेवा = 'mysql'
    if ps कुल्हाड़ी | grep -v grep | grep $ सेवा> / dev / null
    फिर
    गूंज "$ सेवा सेवा चल रही है"
    अन्य
    गूंज "$ सेवा सेवा बंद है"

  11.   जुआ कार्लोस सी कहा

    मैं आपकी स्क्रिप्ट्स के साथ बहुत व्यावहारिक हूं, लेकिन मेरे पास एक समस्या को हल करने के लिए एक विशेष स्क्रिप्ट की तलाश है, जो निम्नलिखित है: हमारे पास कंपनी में एक एप्लिकेशन सर्वर है जिसे आंतरिक उपयोगकर्ता टेलनेट द्वारा एक्सेस करते हैं, और एक विशेष एप्लिकेशन को निष्पादित करते हैं जो सीमित है लाइसेंस के लिए, उपयोगकर्ता 2 से अधिक या अधिक लाइसेंस लेने के लिए एक से अधिक टेलनेट का दुरुपयोग करते हैं और खोलते हैं, इसलिए मैंने जो स्क्रिप्ट सोचा है वह यह है कि किसी विधि से, यह जांचें कि टेलनेट प्रक्रिया 2 घंटे से अधिक समय तक निष्क्रिय है और इसलिए उस पर एक किल भेजें क्या तुम मेरी मदद कर सकते हो?

    1.    डिएगो कहा

      निम्न प्रोग्राम स्थापित करें

      योग्यता ऑटोलॉग को स्थापित करती है

      और कॉन्फ़िगरेशन फ़ाइल आपके पास /etc/autolog.conf में है

  12.   टिटो कहा

    महान, दोस्त, मैं आपसे एक प्रश्न पूछ सकता हूं, मुझे विकल्पों के साथ एक शेल स्क्रिप्ट की आवश्यकता है और मैंने इसे आपके आधार पर आधारित किया है और यह बहुत अच्छा काम करता है, लेकिन विकल्पों में से एक को ईमेल भेजना है (पोस्टिफ़िक्स का उपयोग करके), यह स्क्रीन पर विषय, पाठ और प्राप्तकर्ताओं के लिए पूछता है और क्या भेजें और जांचें कि यह सही ढंग से भेजा गया है, मेलक के साथ मैं कतार को देख सकता हूं और देख सकता हूं कि क्या इसे भेजा गया था, लेकिन मैं विषय, पाठ और प्राप्तकर्ताओं को प्राप्त चर का उपयोग करके कमांड को ईमेल कैसे भेज सकता हूं? 🙁

    1.    KZKG ^ गारा कहा

      मेरे ईमेल पर लिखें (kzkggaara[at]desdelinux[डॉट] नेट) अधिक शांति से बोलने के लिए, मुझे आपकी मदद करने में खुशी होगी :)

      1.    टिटो कहा

        महान धन्यवाद दोस्त, आप पारित कर दिया!

  13.   Fer कहा

    हैलो अच्छा।
    मुझे इन उत्कृष्ट उदाहरणों के बारे में पता चला है, जब मुझे एक मेनू की आवश्यकता थी।
    मैंने इसे शुरू कर दिया है और इसे काम करने के लिए (पिछले चरणों में) प्राप्त नहीं कर सकता।
    मेरे पास 247 तत्व हैं, जो विभिन्न क्षेत्रीय डोमेन को संदर्भित करते हैं।
    देश को चुनने के लिए मुझे एक मेनू की आवश्यकता है:
    #! / Bin / bash
    स्पष्ट
    जबकि:
    do
    गूंज »देश की कोशिश करने के लिए चुनें»
    गूंज «१। अफगानिस्तान (एएफ) »
    गूंज «२। अल्बानिया (AL) »
    गूंज «३। जर्मनी (DE) »
    गूंज «5। अंगोला (एओ) »
    गूंज «6। एंगुइला (AI) »
    .. और 247 तक जारी है

    इको-एन "एक विकल्प चुनें [1 - 247]"
    विकल्प पढ़ें
    मामले में $ विकल्प
    1) गूंज "यह तुम हो:";
    2) गूंज "आपके पास यह है"; डीएफ ;;
    3) गूंज ""; uname -r ;;
    4) गूंज "अलविदा"; निकास 1 ;;
    5) गूंज "यह तुम हो:";
    6) गूंज "यह तुम हो:";
    … और 247 तक जारी है
    *) गूंज «$ opc एक अमान्य विकल्प है। यह बेहद कठिन है?";
    गूंज "जारी रखने के लिए एक कुंजी दबाएं ...";
    फू पढ़ें ;;
    esac
    किया

    व्यवहार इस प्रकार है:
    4 को छोड़कर कोई भी विकल्प, जो आउटपुट है, दर्ज की गई संख्या को हटा देता है और एक नए नंबर की प्रतीक्षा करता है।
    4 दर्ज करना बाहर आता है।
    अगर मैं किसी अन्य पंक्ति में 4 का कोड डालता हूं (मान लीजिए 150) तो यह समस्याओं के बिना समान रूप से सामने आता है।
    मैंने इस प्रारूप में कोड डालने की भी कोशिश की है:
    151) गूंज "यह तुम हो:";
    मैं कौन हूँ ;;
    उसी परिणाम के साथ।
    मुझे आश्चर्य है कि इतने लंबे मेनू के लिए बेहतर विकल्प हैं और निश्चित रूप से मैं भी गलत कर रहा हूं।
    एक मदद बहुत सराहना की जाएगी, धन्यवाद

  14.   केवल राउल कहा

    उत्कृष्ट ... मुझे लगता है कि शेल में जाना बहुत अच्छा है

    ग्रेसियस

  15.   मार्कोस कहा

    महान, अरे मैं कैसे एक फ़ाइल के साथ मेरे काम कर सकते हैं?
    उदाहरण:

    upload.sh photodelavecina.jpg

    यह सोचकर कि मेरी बैश स्क्रिप्ट "upload.sh" में मेरे ftp तक पहुंच की जानकारी है

    नमस्कार और धन्यवाद 😀

  16.   नेटजुलो एनटीएक्स कहा

    अच्छा आदमी, सभी लिपियों के लिए बहुत-बहुत धन्यवाद, मैंने एक CentOS सर्वर स्थापित किया है और आप नहीं जानते कि ये टेम्पलेट मेरे लिए कितनी अच्छी हैं, कृपया मुझे ईमेल से संपर्क करें। मैं आपको कुछ प्रपोज करना चाहता हूं

  17.   गेब्रियल बल्डरामोस कहा

    मेन्यू बनाते समय आप रीड फू का उपयोग क्यों करते हैं? त्वरित उत्तर मुझे चाहिए