2011-03-21 34 views
6

कोई बता सकता है कि बैश खोल स्क्रिप्ट के लिए परीक्षण कैसे करें?एक बैश खोल स्क्रिप्ट का परीक्षण

उदाहरण के लिए मैं इसे में इस कोड के साथ एक .sh फ़ाइल मिल गया है ...

#!/bin/sh 

for file in *.txt; do 
    mv "$file" "`basename $file .txt`.doc" 
done 

मैं इसके लिए एक परीक्षण कैसे लिख सकता हूँ? जावा में की तरह आपको यूनिट परीक्षण मिल गया है जहां आप कोड लिखने के लिए assertEquals जैसे कोड लिखते हैं वांछित आउटपुट देता है।

+0

जांच इन -> http://stackoverflow.com/questions/1315624/बैश-एंड-टेस्ट-संचालित-विकास, http://stackoverflow.com/questions/1339416/testing-bash- स्क्रिप्ट – Chaitanya

+0

यूनिट परीक्षण बैश स्क्रिप्ट्स। अच्छा लगा। :) –

+0

यह बेहतर है: 'एमवी "$ फ़ाइल" "$ (बेसनाम" $ फ़ाइल ".txt) .doc" 'या' mv "$ file" "$ {file% *। Txt} .doc" ' –

उत्तर

3

मैं mv के सामने echo जोड़ता हूं ताकि यह सत्यापित किया जा सके कि सही आदेश प्रारंभ किए जा रहे हैं। (हमेशा एक आदेश होते हैं जो संभवतः परिवर्तनों को पूर्ववत् करने के लिए मुश्किल बनाने के साथ अच्छा विचार।)

कुछ संभवतः उपयोगी संसाधन:

के लिए XUnit ढांचा
+0

ठीक है , धन्यवाद। लेकिन मैं एक .sh फ़ाइल बनाने की कोशिश कर रहा हूं जो पूरे कोड का परीक्षण करे। –

+0

@ एमआर दांत: ऊपर कुछ लिंक जोड़े गए। उस ने कहा, खोल स्क्रिप्ट प्रभावी ढंग से यूनिट परीक्षण के लिए थोड़ा कठिन हैं क्योंकि लगभग सभी चीजें बाह्य आदेशों का आह्वान करने के लिए उबलती हैं। यह उन आदेशों का परीक्षण करने के लिए लगभग अधिक समझदार और उपयोगी है, और नतीजतन, 'echo' के साथ बाह्य संशोधनों को दबाकर स्क्रिप्ट का परीक्षण करें। – geekosaur

7

आप बैश में आवेषण कर सकते हैं। उन्नत बैश-पटकथा गाइड से इस की जाँच करें:

http://tldp.org/LDP/abs/html/debugging.html#ASSERT

+1

कृपया एबीएस को एक संदर्भ के रूप में प्रोत्साहित न करें - एक नियम के रूप में, यह कमजोर है, और खराब अभ्यास उदाहरणों को प्रदर्शित करने की आदत बनाता है। वूलेज विकी और बैश-हैकर विकी (और निश्चित रूप से आधिकारिक मैनुअल) * बहुत * बेहतर संसाधन हैं। –

-1
#!/bin/sh 
for file in *.txt; do 
    echo mv "$file" "`basename $file .txt`.doc" 
done 
2

इस आजमाएं: assert.sh

source "./assert.sh" 

local expected actual 
expected="Hello" 
actual="World!" 
assert_eq "$expected" "$actual" "not equivalent!" 
# => x Hello == World :: not equivalent! 
संबंधित मुद्दे