ऑनवर्क्स लिनक्स और विंडोज ऑनलाइन वर्कस्टेशन

प्रतीक चिन्ह

वर्कस्टेशन के लिए मुफ्त होस्टिंग ऑनलाइन

<पिछला | विषय-सूची | अगला>

एक अधिक संपूर्ण एप्लिकेशन

लंबे अंतराल के बाद हम अपना काम फिर से शुरू करने जा रहे हैं sys_info_page कार्यक्रम. हमारा अगला जोड़ प्रोग्राम में निम्नानुसार कई कमांड लाइन विकल्प जोड़ेगा:

निर्गम संचिका। हम प्रोग्राम के आउटपुट को शामिल करने के लिए फ़ाइल के लिए एक नाम निर्दिष्ट करने का विकल्प जोड़ेंगे। इसे या तो निर्दिष्ट किया जाएगा -f पट्टिका or --फ़ाइल पट्टिका.

इंटरैक्टिव मोड. यह विकल्प उपयोगकर्ता को आउटपुट फ़ाइल नाम के लिए संकेत देगा और यह निर्धारित करेगा कि निर्दिष्ट फ़ाइल पहले से मौजूद है या नहीं। यदि ऐसा होता है, तो मौजूदा फ़ाइल को अधिलेखित करने से पहले उपयोगकर्ता को संकेत दिया जाएगा। यह विकल्प या तो निर्दिष्ट किया जाएगा -i or --इंटरैक्टिव.

मदद। भी -h or --मदद प्रोग्राम को सूचनात्मक उपयोग संदेश आउटपुट करने के लिए निर्दिष्ट किया जा सकता है।

कमांड लाइन प्रोसेसिंग को लागू करने के लिए आवश्यक कोड यहां दिया गया है:



उपयोग () {

इको "$PROGNAME: उपयोग: $PROGNAME [-f फ़ाइल | -i]" वापसी

}

# प्रक्रिया कमांड लाइन विकल्प इंटरैक्टिव =

उपयोग () {

इको "$PROGNAME: उपयोग: $PROGNAME [-f फ़ाइल | -i]" वापसी

}

# प्रक्रिया कमांड लाइन विकल्प इंटरैक्टिव =


फ़ाइलनाम=


जबकि [[ -n $1 ]]; केस $1 इन करें

-एफ | --फ़ाइल)

पाली

फ़ाइलनाम=$1

;;

फ़ाइलनाम=


जबकि [[ -n $1 ]]; केस $1 इन करें

-एफ | --फ़ाइल)


-मैं | --इंटरैक्टिव) इंटरैक्टिव=1

;;

-एच | --help) उपयोग निकास

;;

*) उपयोग >&2

बाहर निकलें 1

;;

-मैं | --इंटरैक्टिव) इंटरैक्टिव=1

;;

-एच | --help) उपयोग निकास

;;

*) उपयोग >&2

बाहर निकलें 1

;;


esac

शिफ्ट हो गया

esac

शिफ्ट हो गया


की छवि

सबसे पहले, हम एक शेल फ़ंक्शन जोड़ते हैं जिसे कहा जाता है प्रयोग जब सहायता विकल्प लागू किया जाता है या कोई अज्ञात विकल्प का प्रयास किया जाता है तो एक संदेश प्रदर्शित करने के लिए।

इसके बाद, हम प्रोसेसिंग लूप शुरू करते हैं। यह लूप स्थितीय पैरामीटर के दौरान जारी रहता है

$1 खाली नहीं है. लूप के अंत में, हमारे पास स्थितिगत मापदंडों को आगे बढ़ाने के लिए एक शिफ्ट कमांड है ताकि यह सुनिश्चित किया जा सके कि लूप अंततः समाप्त हो जाएगा।

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

RSI -f पैरामीटर को दिलचस्प तरीके से संभाला जाता है। जब इसका पता चलता है, तो यह अतिरिक्त कारण बनता है पाली घटित होना, जो स्थितीय पैरामीटर को आगे बढ़ाता है $1 को दिए गए फ़ाइल नाम तर्क के लिए -f विकल्प.

हम इंटरैक्टिव मोड को लागू करने के लिए अगला कोड जोड़ते हैं:



# इंटरैक्टिव मोड


यदि [[ -n $इंटरैक्टिव ]]; तब जबकि सत्य; करना

पढ़ें -p "आउटपुट फ़ाइल का नाम दर्ज करें: " फ़ाइल नाम यदि [[ -ई $ फ़ाइल नाम ]]; तब

पढ़ें -पी "'$फ़ाइलनाम' मौजूद है। अधिलेखित करें? [y/n/q] > " मामले में $उत्तर

Y|y) टूटना

# इंटरैक्टिव मोड


यदि [[ -n $इंटरैक्टिव ]]; तब जबकि सत्य; करना

पढ़ें -p "आउटपुट फ़ाइल का नाम दर्ज करें: " फ़ाइल नाम यदि [[ -ई $ फ़ाइल नाम ]]; तब

पढ़ें -पी "'$फ़ाइलनाम' मौजूद है। अधिलेखित करें? [y/n/q] > " मामले में $उत्तर

Y|y) टूटना


;;

Q|q) प्रतिध्वनि "कार्यक्रम समाप्त हो गया।" बाहर निकलना

;;

*) जारी रखना

;;

esac

elif [[ -z $फ़ाइलनाम ]]; फिर जारी रखें

अन्य

तोड़ना

fi

किया

fi

;;

Q|q) प्रतिध्वनि "कार्यक्रम समाप्त हो गया।" बाहर निकलना

;;

*) जारी रखना

;;

esac

elif [[ -z $फ़ाइलनाम ]]; फिर जारी रखें

अन्य

तोड़ना

fi

किया

fi


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

आउटपुट फ़ाइल नाम सुविधा को लागू करने के लिए, हमें पहले मौजूदा पेज-लेखन कोड को शेल फ़ंक्शन में परिवर्तित करना होगा, जिसके कारण एक पल में स्पष्ट हो जाएंगे:



राइट_एचटीएमएल_पेज () { कैट <<- _ईओएफ_

$शीर्षक

$शीर्षक

$टाइमस्टैम्प

$(रिपोर्ट_अपटाइम)

$(रिपोर्ट_डिस्क_स्पेस)

$(रिपोर्ट_होम_स्पेस)

_ईओएफ_ वापसी

}


# आउटपुट html पेज


यदि [[ -n $ फ़ाइल नाम ]]; तब

राइट_एचटीएमएल_पेज () { कैट <<- _ईओएफ_

$शीर्षक

$शीर्षक

$टाइमस्टैम्प

$(रिपोर्ट_अपटाइम)

$(रिपोर्ट_डिस्क_स्पेस)

$(रिपोर्ट_होम_स्पेस)

_ईओएफ_ वापसी

}


# आउटपुट html पेज


यदि [[ -n $ फ़ाइल नाम ]]; तब


यदि $filename && [[ -f $filename ]] को स्पर्श करें; फिर_html_page > $filename लिखें

अन्य

प्रतिध्वनि "$PROGNAME: फ़ाइल '$फ़ाइलनाम' नहीं लिख सकता" >&2 निकास 1

फाई अन्य

लिखें_एचटीएमएल_पेज

fi

यदि $filename && [[ -f $filename ]] को स्पर्श करें; फिर_html_page > $filename लिखें

अन्य

प्रतिध्वनि "$PROGNAME: फ़ाइल '$फ़ाइलनाम' नहीं लिख सकता" >&2 निकास 1

फाई अन्य

लिखें_एचटीएमएल_पेज

fi


वह कोड जो के तर्क को संभालता है -f विकल्प ऊपर दिखाई गई सूची के अंत में दिखाई देता है। इसमें, हम फ़ाइल नाम के अस्तित्व का परीक्षण करते हैं और, यदि कोई पाया जाता है, तो यह देखने के लिए एक परीक्षण किया जाता है कि फ़ाइल वास्तव में लिखने योग्य है या नहीं। ऐसा करने के लिए, ए स्पर्श किया जाता है, जिसके बाद यह निर्धारित करने के लिए परीक्षण किया जाता है कि परिणामी फ़ाइल एक नियमित फ़ाइल है या नहीं। ये दो परीक्षण उन स्थितियों का ध्यान रखते हैं जहां एक अमान्य पथनाम इनपुट किया जाता है (स्पर्श विफल हो जाएगा), और, यदि फ़ाइल पहले से मौजूद है, तो यह एक नियमित फ़ाइल है।

जैसा कि हम देख सकते हैं, लिखें_एचटीएमएल_पेज पेज की वास्तविक पीढ़ी को निष्पादित करने के लिए फ़ंक्शन को कॉल किया जाता है। इसका आउटपुट या तो मानक आउटपुट (यदि वेरिएबल) की ओर निर्देशित होता है फ़ाइल का नाम खाली है) या निर्दिष्ट फ़ाइल पर पुनर्निर्देशित किया गया है।


OnWorks पर शीर्ष OS क्लाउड कंप्यूटिंग: