2011-05-12 15 views
9

मेरे पास निम्न स्क्रिप्ट है और मैं चाहता हूं कि स्क्रिप्ट लाइन एक्स पर निष्पादन करना बंद कर दे, यदि लाइन एक्स में कोई त्रुटि आती है, तो मैं यह कैसे कर सकता हूं?शैल स्क्रिप्ट स्टॉप त्रुटि

 
pvcreate /dev/$1 
vgextend VolGroup00 /dev/$1 
lvextend --size +$2 /dev/VolGroup00/LogVol00 
resize2fs /dev/VolGroup00/LogVol00 

उत्तर

9

आपको इस भाग को निष्पादित करने से पहले कहीं set -e का उपयोग करने की आवश्यकता है।

12

शीर्ष पर निम्न जोड़ें।

set -e 

उस पंक्ति को निष्पादित करने के बाद, यदि कोई लाइन त्रुटि कोड लौटाती है तो खोल बाहर निकल जाएगा। set +e इसे फिर से बंद कर देगा (यानी किसी भी त्रुटि रिटर्न कोड के बावजूद जारी रखने के लिए वापस स्विच करें)।

अधिक जानकारी के लिए http://www.davidpashley.com/articles/writing-robust-shell-scripts.html देखें।

1

आपको अपने रिटर्न कोड को जांचने के लिए प्रत्येक चरण को पूछना होगा। इसका मतलब है कि आपको समझना होगा कि प्रत्येक क्वेरी के लिए रिटर्न कोड क्या है (प्रत्येक के लिए अलग हो सकता है)। नीचे दिया गया उदाहरण त्रुटि कोड -1 के लिए vgextend चेक करता है, फिर -1 स्वयं देता है।

pvcreate /dev/$1 
vgextend VolGroup00 /dev/$1 

if [ $? == -1 ]; then 
     echo "vgextend returned an error" 
     exit -1; 
fi 

lvextend --size +$2 /dev/VolGroup00/LogVol00 
resize2fs /dev/VolGroup00/LogVol00 

सेट-शायद अधिक हो सकता है, क्योंकि कुछ त्रुटियों के तहत कुछ त्रुटियां सहनशील हो सकती हैं। नीचे दिए गए उदाहरण में, अगर फ़ाइल मौजूद नहीं है, तो आरएम एक त्रुटि लौटाएगा, लेकिन जारी रखना ठीक है (हाँ, मुझे पता है कि हम एक सशर्त हटा सकते हैं, लेकिन उदाहरण बनाने के लिए इसका मतलब है।)

# delete the file, it it exists 
rm thefile 
# create the file 
touch thefile 
+0

मैं इन संभावित-से-असफल आदेशों को अलग से चिह्नित करने की सलाह दूंगा, जैसे 'आरएम somefile || TRUE'। इस मामले में 'सेट-ई' ट्रिगर नहीं होगा। –

संबंधित मुद्दे