Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Bash प्रोग्रामिंग

Bash केस स्टेटमेंट्स में मास्टर करें: कुशल स्क्रिप्टिंग के लिए 5 व्यावहारिक उदाहरण

Bash शेल केस स्टेटमेंट C में स्विच स्टेटमेंट के समान है। इसका उपयोग पूर्णांक और वर्ण जैसे सरल मानों का परीक्षण करने के लिए किया जा सकता है।

केस स्टेटमेंट एक लूप नहीं है, यह कोड के ब्लॉक को n बार निष्पादित नहीं करता। इसके बजाय, bash शेल शर्त की जांच करता है, और प्रोग्राम के प्रवाह को नियंत्रित करता है।

इस लेख में आइए 5 व्यावहारिक उदाहरणों के साथ bash case कमांड की समीक्षा करें।

Bash शेल में केस निर्माण हमें पैटर्न के खिलाफ स्ट्रिंग्स का परीक्षण करने की अनुमति देता है जिनमें वाइल्ड कार्ड वर्ण हो सकते हैं। Bash केस स्टेटमेंट bash if-then-else स्टेटमेंट का सबसे सरल रूप है।

Bash केस स्टेटमेंट का सिंटैक्स।

case expression in pattern1 ) statements ;; pattern2 ) statements ;; ... esac 

Bash केस स्टेटमेंट्स के मुख्य बिंदु निम्नलिखित हैं:

  • केस स्टेटमेंट पहले एक्सप्रेशन का विस्तार करता है और इसे प्रत्येक पैटर्न के खिलाफ मिलान करने का प्रयास करता है।
  • जब एक मैच मिलता है तो डबल सेमीकॉलन (;;) तक के सभी संबंधित स्टेटमेंट्स निष्पादित होते हैं।
  • पहले मैच के बाद, केस अंतिम निष्पादित कमांड की एग्जिट स्टेटस के साथ समाप्त होता है।
  • यदि कोई मैच नहीं है, तो केस की एग्जिट स्टेटस शून्य है।

Bash केस उदाहरण 1. एक प्रक्रिया को सिग्नल भेजना

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

यह स्क्रिप्ट केस स्टेटमेंट के उपयोग को प्रदर्शित करने के लिए है।

$ cat signal.sh #!/bin/bash if [ $# -lt 2 ] then echo "Usage : $0 Signalnumber PID" exit fi case "$1" in 1) echo "Sending SIGHUP signal" kill -SIGHUP $2 ;; 2) echo "Sending SIGINT signal" kill -SIGINT $2 ;; 3) echo "Sending SIGQUIT signal" kill -SIGQUIT $2 ;; 9) echo "Sending SIGKILL signal" kill -SIGKILL $2 ;; *) echo "Signal number $1 is not processed" ;; esac 

उपरोक्त उदाहरण में:

  • $1 और $2 क्रमशः सिग्नल नंबर और प्रक्रिया आईडी हैं।
  • kill कमांड का उपयोग करके, यह दिए गए प्रक्रिया आईडी को संबंधित सिग्नल भेजता है।
  • यह सेकंड की संख्या के लिए sleep कमांड निष्पादित करता है।
  • वैकल्पिक अंतिम तुलना *) एक डिफ़ॉल्ट केस है और यह किसी भी चीज़ से मेल खाता है।

उपरोक्त शेल स्क्रिप्ट का उपयोग: sleep कमांड की प्रक्रिया आईडी ढूंढें और उस प्रक्रिया आईडी को किल सिग्नल भेजें ताकि प्रक्रिया को मार दिया जाए।

$ sleep 1000 $ ps -a | grep sleep 23277 pts/2 00:00:00 sleep $ ./signal.sh 9 23277 Sending SIGKILL signal $ sleep 1000 Killed 

इसके अलावा, हमारे पहले के kill लेख देखें - 4 तरीके एक प्रक्रिया को मारने के।

Bash केस उदाहरण 2. फ़ाइल में पैटर्न मिलान

यह उदाहरण दिए गए पैटर्न से मेल खाने वाली लाइनों की संख्या, शब्दों की संख्या प्रिंट करता है और उन लाइनों को हटा देता है जो दिए गए पैटर्न से मेल खाती हैं।

$ cat fileop.sh #!/bin/bash # 3 आर्ग्यूमेंट्स दिए गए हैं जांचें # if [ $# -lt 3 ] then echo "Usage : $0 option pattern filename" exit fi # दी गई फ़ाइल मौजूद है जांचें # if [ ! -f $3 ] then echo "Filename given \"$3\" doesn't exist" exit fi case "$1" in # पैटर्न से मेल खाने वाली लाइनों की संख्या गिनें -i) echo "Number of lines matches with the pattern $2 :" grep -c -i $2 $3 ;; # पैटर्न से मेल खाने वाले शब्दों की संख्या गिनें -c) echo "Number of words matches with the pattern $2 :" grep -o -i $2 $3 | wc -l ;; # सभी मिलान वाली लाइन्स प्रिंट करें -p) echo "Lines matches with the pattern $2 :" grep -i $2 $3 ;; # पैटर्न से मेल खाने वाली सभी लाइन्स हटाएं -d) echo "After deleting the lines matches with the pattern $2 :" sed -n "/$2/!p" $3 ;; *) echo "Invalid option" ;; esac 

उपरोक्त स्क्रिप्ट का निष्पादन नीचे दिखाया गया है।

$ cat text Vim is a text editor released by Bram Moolenaar in 1991 for the Amiga computer. The name "Vim" is an acronym for "Vi IMproved" because Vim was created as an extended version of the vi editor, with many additional features designed to be helpful in editing program source code. Although Vim was originally released for the Amiga, Vim has since been developed to be cross-platform, supporting many other platforms. It is the most popular editor amongst Linux Journal readers. 

Bash केस रेगेक्स आउटपुट। पैटर्न Vim से मेल खाने वाली लाइन्स हटाने के बाद:

$ ./fileop.sh -d Vim text It is the most popular editor amongst Linux Journal readers. 

इसके अलावा, Bash ~ विस्तार और { } विस्तार पर हमारे पहले के लेख देखें।

Bash केस उदाहरण 3. एक्सटेंशन से फ़ाइल प्रकार ढूंढें

यह उदाहरण फ़ाइलनाम के एक्सटेंशन के आधार पर फ़ाइल के प्रकार (टेक्स्ट, C स्रोत, आदि) को प्रिंट करता है।

$ cat filetype.sh #!/bin/bash for filename in $(ls) do # फ़ाइलनाम में उपलब्ध एक्सटेंशन लें ext=${filename##*\.} case "$ext" in c) echo "$filename : C source file" ;; o) echo "$filename : Object file" ;; sh) echo "$filename : Shell script" ;; txt) echo "$filename : Text file" ;; *) echo " $filename : Not processed" ;; esac done $ ./filetype.sh a.c : C source file b.c : C source file c1.txt : Text file fileop.sh : Shell script obj.o : Object file text : Not processed t.o : Object file 

Bash केस उदाहरण 4. उपयोगकर्ता को हां या ना के साथ प्रॉम्प्ट करें

अधिकांश सॉफ़्टवेयर इंस्टॉलेशन में, लाइसेंस समझौते के दौरान, यह उपयोगकर्ता से हां या ना इनपुट मांगेगा। निम्न कोड स्निपेट उपयोगकर्ता से हां या ना इनपुट प्राप्त करने के तरीकों में से एक है।

$ cat yorno.sh #!/bin/bash echo -n "Do you agree with this? [yes or no]: " read yno case $yno in [yY] | [yY][Ee][Ss] ) echo "Agreed" ;; [nN] | [n|N][O|o] ) echo "Not agreed, you can't proceed the installation"; exit 1 ;; *) echo "Invalid input" ;; esac $ ./yorno.sh Do you agree with this? [yes or no]: YES Agreed 

यदि कई पैटर्न पाइप वर्णों द्वारा अलग किए गए हैं, तो संबंधित स्टेटमेंट्स को चलाने के लिए एक्सप्रेशन उनमें से किसी से भी मेल खा सकता है। पैटर्न्स को क्रम में तब तक जांचा जाता है जब तक कोई मैच नहीं मिल जाता; यदि कोई नहीं मिलता है, तो कुछ नहीं होता।

इसके अलावा, हमारे पहले के 15 bash सरणी उदाहरण लेख देखें।

Bash केस उदाहरण 5. स्टार्टअप स्क्रिप्ट

/etc/init.d निर्देशिका में स्टार्टअप स्क्रिप्ट्स एप्लिकेशन को शुरू और रोकने के लिए केस स्टेटमेंट का उपयोग करती हैं।

आप किसी भी प्रकार के पैटर्न का उपयोग कर सकते हैं, लेकिन जब आप प्रिमिटिव के मूल्यों पर परीक्षण कर रहे हों तो केस स्टेटमेंट का उपयोग करने की हमेशा सिफारिश की जाती है। (यानी पूर्णांक या वर्ण)।

$ cat startpcapp #!/bin/bash case "$1" in 'start') echo "Starting application" /usr/bin/startpc ;; 'stop') echo "Stopping application" /usr/bin/stoppc ;; 'restart') echo "Usage: $0 [start|stop]" ;; esac $ ./startpcapp start Starting application /usr/bin/startpc started 

अनुशंसित पठन

Bash 101 Hacks, रमेश नटराजन द्वारा. मैं अपना अधिकांश समय Linux वातावरण में बिताता हूं। इसलिए, स्वाभाविक रूप से मैं Bash कमांड लाइन और शेल स्क्रिप्टिंग का बहुत बड़ा प्रशंसक हूं। 15 साल पहले, जब मैं *nix के विभिन्न फ्लेवर्स पर काम कर रहा था, मैं C शेल और Korn शेल पर बहुत सारा कोड लिखता था। बाद के वर्षों में, जब मैंने Linux पर सिस्टम एडमिनिस्ट्रेटर के रूप में काम करना शुरू किया, तो मैंने Bash शेल स्क्रिप्टिंग का उपयोग करके हर संभव कार्य को स्वचालित कर दिया। अपने Bash अनुभव के आधार पर, मैंने Bash 101 Hacks ईबुक लिखी है जिसमें Bash कमांड लाइन और शेल स्क्रिप्टिंग दोनों पर 101 व्यावहारिक उदाहरण हैं। यदि आप Bash में मास्टर बनने के बारे में सोच रहे हैं, तो अपना उपकार करें और इस पुस्तक को पढ़ें, जो आपके Bash कमांड लाइन और शेल स्क्रिप्टिंग पर नियंत्रण पाने में मदद करेगी।

  1. C++ में निर्णय लेना (Decision Making) C++ में निर्णय लेना (Decision Making)

    निर्णय लेने की संरचनाओं के लिए आवश्यक है कि प्रोग्रामर एक या अधिक शर्तों को निर्दिष्ट करे जिनका मूल्यांकन या परीक्षण प्रोग्राम द्वारा किया जाए, साथ ही उन स्टेटमेंट्स को जो तब निष्पादित होंगे जब शर्त सत्य निर्धारित हो, और वैकल्पिक रूप से, अन्य स्टेटमेंट्स जो तब निष्पादित होंगे जब शर्त असत्य निर्धारित

  1. rbash: रिस्ट्रिक्टेड Bash शेल में महारत - अवधारणाएं, उपयोग और व्यावहारिक उदाहरण rbash: रिस्ट्रिक्टेड Bash शेल में महारत - अवधारणाएं, उपयोग और व्यावहारिक उदाहरण

    लिनक्स शेल सबसे आकर्षक और शक्तिशाली GNU/लिनक्स संचालित टूल में से एक है। X सहित सभी एप्लिकेशन, शेल पर बने हैं और लिनक्स शेल इतना शक्तिशाली है कि इसका उपयोग करके पूरे लिनक्स सिस्टम को सटीक रूप से नियंत्रित किया जा सकता है। लिनक्स शेल का दूसरा पहलू यह है कि यह संभावित रूप से हानिकारक हो सकता है, जब आप

  1. - Bash सरणी में मास्टर करें: 15 व्यावहारिक उदाहरण और व्यापक ट्यूटोरियल

    एक सरणी एक वेरिएबल है जिसमें एक ही प्रकार के या अलग प्रकार के कई मान हो सकते हैं। सरणी के आकार की कोई अधिकतम सीमा नहीं है, और न ही किसी आवश्यकता है कि सदस्य वेरिएबल्स इंडेक्स्ड या सन्निकट रूप से असाइन किए जाएं। सरणी इंडेक्स शून्य से शुरू होता है। इस लेख में, आइए bash में 15 विभिन्न सरणी संचालन की सम