बाश-लिपिमा तर्कहरू कसरी पार गर्ने?

आदेश, वाक्य रचना र उदाहरणहरू

तपाइँ एक पाश स्क्रिप्ट यस्तो लेख्न सक्नुहुन्छ कि यो लिपि आदेश लाइनबाट भनिन्छ जब निर्दिष्ट गरिएको तर्कहरू प्राप्त गर्दछ। यो विधि प्रयोग गरिन्छ जब लिपिहरू इनपुट प्यारामिटरहरू (तर्कहरू) को मानहरूको आधारमा एक फरक फरक प्रकार्य प्रदर्शन गर्दछ।

उदाहरणका लागि, तपाईं "stats.sh" भनिन्छ स्क्रिप्ट हुन सक्छ जुन फाइलमा एक विशेष अपरेसन सञ्चालन गर्दछ, जस्तै यसको शब्दहरूको गणना। यदि तपाईं धेरै फाईलहरूमा कि लिपि प्रयोग गर्न सक्षम हुनुहुन्छ भने, यो फाइल नामलाई तर्कको रूपमा पङ्क्तिबद्ध गर्न सर्वोत्तम छ, ताकि तपाइँ प्रशोधन गर्न सबै फाईलहरूका लागि एकै स्क्रिप्ट प्रयोग गर्न सक्नुहुनेछ। उदाहरणको लागि, यदि फाईलको नाम प्रशोधन गर्नको नाम "गीतसूची" हो, तपाइँ निम्न आदेश रेखा प्रविष्ट गर्नुहुनेछ:

sh stats.sh गीत सूची

तर्कहरू $ 1, $ 2, $ 3, आदि प्रयोग गरेर स्क्रिप्ट भित्र पहुँच गरिन्छ, जहाँ $ 1 ले पहिलो तर्क, $ 2 लाई दोस्रो तर्क र $ 2 लाई बुझाउँछ। यो निम्न उदाहरणमा चित्रण गरिएको छ:

FILE1 = $ 1 wc $ फाइल 1

पढ्न योग्यताको लागि, वर्णनात्मक नामसँग चर निर्दिष्ट गर्नुहोस् पहिलो तर्क ($ 1) को मूल्यमा, र त्यसपछि यो चर ($ FILE1) मा शब्द गणना उपयोगिता ( wc ) कल गर्नुहोस्।

यदि तपाइँसँग आर्गुमेन्टहरूको चर संख्या छ भने, तपाईं "$ @" चर प्रयोग गर्न सक्नुहुन्छ, जुन सबै इनपुट प्यारामिटरहरूको array हो। यसको मतलब तपाईं फन्ट -लूप प्रयोग गर्न सक्नुहुन्छ प्रत्येक रूपमा प्रशोधन गर्न, निम्न उदाहरणमा दृष्टान्त:

को लागि FILE1 "$ @" मा wc $ FILE1 गरियो

यहाँ यो स्क्रिप्टलाई कमान लाइनबाट बहसहरूसँग कसरी कल गर्ने एउटा उदाहरण हो:

s stats.sh गीत सूची 1 गीत सूची 2 गीत सूची 3

यदि तर्कहरू रिक्त ठाउँ छन् भने, तपाइँले एकल उद्धरणको साथ यसलाई एन्कोल गर्न आवश्यक छ। उदाहरणका लागि:

sh stats.sh 'songlist 1' 'songlist 2' 'songlist 3'

प्रायः एक लिपि यस्तो लेखिएको छ कि प्रयोगकर्ता झण्डा प्रयोग गरेर कुनै पनि क्रममा तर्कहरूमा पास गर्न सक्दछ। झण्डा विधिको साथ, तपाईं वैकल्पिक तर्कहरू पनि गर्न सक्नुहुनेछ।

मान्नुहोस् कि तपाईको स्क्रिप्ट छ कि निर्दिष्ट पैरामीटरहरूको आधारमा डेटाबेसबाट पुनःप्राप्त गर्दछ, जस्तै "प्रयोगकर्ता नाम", "मिति", र "उत्पादन", र निर्दिष्ट "ढाँचा" मा रिपोर्ट उत्पन्न गर्दछ। अब तपाई आफ्नो लिपि लेख्न चाहानुहुन्छ कि स्क्रिप्ट भनिन्छ जब तपाइँ यी प्यारामिटरहरूमा पास गर्न सक्नुहुनेछ। यसले यो हेर्न सक्छ:

makereport -u jsmith -p नोटबुक्स -d 10-20-2011 -f pdf

बशले यो कार्यक्षमतालाई "getopts" प्रकार्यसँग सक्षम बनाउँछ। माथिको उदाहरणको लागि, तपाइँ निम्नानुसार प्राप्तकर्ताहरू प्रयोग गर्न सक्नुहुनेछ:

यो थोपा-पाश हो जसले "getopts" प्रकार्य र एक तथाकथित "अप्टस्ट्रिंग" को प्रयोग गर्दछ, यस मामिलामा "u: d: p: f:", आर्गुमेन्ट मार्फत पुनरावर्ती गर्न। जबप्टप अप्ट्रिङ मार्फत हिड्छ, जुन तर्कहरू जुन प्रयोग गर्न सकिन्छ जुन झण्डाहरू समावेश गर्न सकिन्छ, र चर "विकल्प" मा फ्ल्यागको लागि प्रदान गरिएको तर्क मान प्रदान गर्दछ। तब केस-कथनले चर "मान" को मान विश्वव्यापी चरको मान गर्दछ जुन सबै तर्कहरू पछि पढ्न सकिन्छ।

ओप्स्टस्ट्रिंगमा कोलोनले अर्थहरूलाई झण्डाको झण्डाको लागि आवश्यक पर्दछ। माथिको उदाहरणमा सबै झण्डाहरू कोलोनले पछ्याउँछ: "u: d: p: f:"। यसको मतलब, सबै झण्डाहरूलाई एक मान चाहिन्छ। यदि, उदाहरणका लागि, "d" र "f" झण्डाहरूलाई मान्न अपेक्षा गरिएको थिएन, अप्टलिङ "u: dp: f" हुनेछ।

Optstring को शुरुवात एक बृहदान्त्र, उदाहरणका लागि: "u: d: p: f:", सँगै पूर्ण अर्थ छ। यसले तपाईंलाई अप्ट्राङमा प्रतिनिधित्व नगरे झण्डाहरू संभाल्न अनुमति दिन्छ। त्यस अवस्थामा "विकल्प" चरको मान "" "मा सेट गरिएको छ। र "OPTARG" को मूल्य अप्रत्याशित ध्वजमा सेट गरिएको छ। तपाईंलाई गलत त्रुटि सन्देश प्रदर्शन गर्न अनुमति दिन्छ जो गल्तीको प्रयोगकर्ता लाई सूचित गर्दछ।

तर्कहरू जुन फ्ल्यागमा अघिल्लो नतिजाले getopts द्वारा उपेक्षा गरिन्छ। यदि अप्ट्रिङमा निर्दिष्ट गरिएको झण्डा लिपि भनिन्छ भने प्रदान गरिएको छैन, केही पनि हुन्छ, जब सम्म तपाइँ विशेष गरी यस कोडलाई तपाइँको कोडमा सम्भाल्न सक्नुहुन्न। प्राप्तपुन द्वारा संकुचित कुनै तर्कहरू अझै पनि नियमित $ 1, $ 2, आदि चरहरूसँग कैद गर्न सकिन्छ।