2013-11-22 11 views
10

मेरे पास कोड का एक निम्न भाग है जो कहता है कि अगर सब कुछ निष्पादित किया जाता है तो यह किसी व्यक्ति को मेल संदेश में विफल रहता है।

if [[ $? -ne 0 ]]; then 
    mailx -s" could not PreProcess files" [email protected] 
else    
    mailx -s" PreProcessed files" [email protected] 
fi 
done 

मैं कोडिंग Linux में नया हूँ मैं समझने के लिए क्या मतलब है if [[ $? -ne 0 ]];

उत्तर

10

इसे सरल, सरल शब्दों को तोड़ना। यह:

[[ and ]] 

सत्यता के लिए एक परीक्षण किया जा रहा है। यह:

$? 

अंतिम रन कमांड का निकास कोड रखने वाला एक चर है। यह:

-ne 0 

बाईं ओर की चीज़ की जांच करता है ($?) "शून्य" के बराबर नहीं है। यूनिक्स में, शून्य के साथ निकलने वाला एक आदेश सफल हुआ, जबकि किसी भी अन्य मूल्य (1, 2, 3 ... 255 तक) के बाहर निकलने में विफलता एक विफलता है।

for var in list of words; do 
    cmd $var 
    if [[ $? -ne 0 ]]; then 
     mailx -s" could not PreProcess files" [email protected] 
    else    
     mailx -s" PreProcessed files" [email protected] 
    fi 
done 

कौन सा सकता है (और चाहिए) को फिर से लिखा जा अधिक बस के रूप में:

for var in list of words; do 
    if ! cmd $var; then 
    message="could not PreProcess files" 
    else 
    message="PreProcessed files 
    fi 
    mailx -s" $message" [email protected] 
done 

[[ $? -ne 0 ]] खंड एक है

+0

अब संवेदना देता है धन्यवाद –

3
if [[ $? -ne 0 ]]; 

जाँच कर रहा है तुरंत पिछले इस अगर हालत की वापसी कोड चाहते हैं।

  • $? वापसी कोड
  • $? -ne 0 का मतलब है के बाद से 0 पिछला आदेश एक त्रुटि वापसी कोड लौटे तो सफलता
+0

तो सरल शब्द में इसका मतलब है, अगर पिछले कोड ने जॉब मेल को त्रुटि के साथ नहीं किया है और यदि कोड ने अपना काम किया है तो बस मेल करें, है ना? –

+0

हाँ बिल्कुल @Rahulsawant – anubhava

+1

मैं इसे जोड़ दूंगा- एक "बराबर नहीं" – Guido

0

माना जाता है पिछला आदेश त्रुटि दी है।

+0

मुझे यह मिला है धन्यवाद –

0

मुमकिन है, स्निपेट कोड की बात यह है कि तरह दिखता है cmd के वापसी मूल्य की जांच करने के लिए हैकिश तरीका, लेकिन यह स्पष्ट रूप से $? को जांचने के लिए लगभग हमेशा अनावश्यक है। अगर आप शेल को अगर खंड में कमांड का आह्वान करके चेक करते हैं तो कोड लगभग हमेशा क्लीनर होता है।

+0

वास्तव में कई मामलों में यह 'if' खंड होना आवश्यक नहीं है , बस 'cmd || करें only_executed_when_return_code_from_cmd_is_not_equal_to_success' – Jite

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