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

प्रतीक चिन्ह

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

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

रक्षात्मक प्रोग्रामिंग

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


सीडी $dir_name आरएम *

सीडी $dir_name आरएम *


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

आइए कुछ तरीकों पर गौर करें जिनसे इस डिज़ाइन को बेहतर बनाया जा सकता है। सबसे पहले, इसका क्रियान्वयन करना बुद्धिमानी हो सकती है rm की सफलता पर निर्भर है cd:


सीडी $dir_name && rm *

सीडी $dir_name && rm *


इस तरह, यदि cd आदेश विफल रहता है, rm आदेश का पालन नहीं किया जाता. यह बेहतर है, लेकिन फिर भी यह संभावना खुली रहती है कि चर, dir_name, अनसेट या खाली है, जिसके परिणामस्वरूप उपयोगकर्ता की होम निर्देशिका की फ़ाइलें हटा दी जाएंगी। यह देखने के लिए जाँच करके भी इससे बचा जा सकता है dir_name वास्तव में मौजूदा निर्देशिका का नाम शामिल है:



[[ -d $dir_name ]] && cd $dir_name && rm *

[[ -d $dir_name ]] && cd $dir_name && rm *


अक्सर, स्क्रिप्ट को समाप्त करने के लिए तर्क को शामिल करना और उपरोक्त जैसी स्थिति होने पर त्रुटि की रिपोर्ट करना सबसे अच्छा होता है:



# निर्देशिका $dir_name में फ़ाइलें हटाएं यदि [[ ! -d "$dir_name" ]]; तब

इको "ऐसी कोई निर्देशिका नहीं: '$dir_name'" >&2 निकास 1

fi

अगर ! सीडी $dir_name; तब

प्रतिध्वनि "'$dir_name' पर सीडी नहीं जा सकती" >&2 निकास 1

fi

अगर ! आरएम*; तब

इको "फ़ाइल हटाना विफल। परिणाम जांचें" >&2 निकास 1

fi

# निर्देशिका $dir_name में फ़ाइलें हटाएं यदि [[ ! -d "$dir_name" ]]; तब

इको "ऐसी कोई निर्देशिका नहीं: '$dir_name'" >&2 निकास 1

fi

अगर ! सीडी $dir_name; तब

प्रतिध्वनि "'$dir_name' पर सीडी नहीं जा सकती" >&2 निकास 1

fi

अगर ! आरएम*; तब

इको "फ़ाइल हटाना विफल। परिणाम जांचें" >&2 निकास 1

fi


यहां, हम दोनों नाम की जांच करते हैं, यह देखने के लिए कि यह मौजूदा निर्देशिका का है, और सफलता-

तार्किक त्रुटियाँ


का उपकर cd आज्ञा। यदि इनमें से कोई भी विफल रहता है, तो मानक त्रुटि के लिए एक वर्णनात्मक त्रुटि संदेश भेजा जाता है और स्क्रिप्ट विफलता को इंगित करने के लिए एक की निकास स्थिति के साथ समाप्त हो जाती है।


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