2010-10-13 5 views
7

बैश स्क्रिप्ट मेंकीवर्ड "if" परीक्षण कैसे करता है यदि कोई मान गलत है?

if [ 1 ] 
then 
    echo "Yes" 
else 
    echo "No" 
fi 

आउटपुट: Yes

यह प्रतिनिधित्व करता है कि '1' सच के रूप में मान लिया जाता है।

लेकिन कोड में:

word = Linux 
letter = nuxi 
if echo "$word" | grep -q "$letter" 
then 
    echo "Yes" 
else 
    echo "No" 
fi 

आउटपुट: नहीं

लेकिन echo "$word" | grep -q "$letter" 1 वापस आ जाएगी, क्यों परिणाम हैं कि कीवर्ड if परीक्षण आदेश द्वारा दिए गए मान के बाद नहीं।

है if?

+0

आप पा सकते हैं [मेरा उत्तर यहाँ] (http://stackoverflow.com/questions/3869072/test-for-non-zero-length-string-in-bash-n-var-or-var/3870055 # 3870055) उपयोगी होने के लिए। –

उत्तर

8

एक आदेश की वापसी मान चेक किया गया है। [ 1 ] का 0 (सत्य) का वापसी मूल्य है। कोई अन्य वापसी मूल्य (जैसे 1) एक त्रुटि इंगित करता है।

true 
echo $? 
# returned 0 
false 
echo $? 
# returned 1 
echo $? 
# returned 0 as the last executed command is 'echo', and not 'false' 
+0

आह, यह क्योंकि '[' एक खोल builtin है, यह 0 लौटने जब यह परीक्षण समारोह पूरा हो जाएगा है? –

+0

ऐसा लगता है कि '0' एक अभिव्यक्ति है जो 'सत्य' का मूल्यांकन करती है। '[0 = 1]' '1' (अपेक्षित मान) का रिटर्न मान है और' [0 = 0] 'का' 0' का वापसी मान है। 'Test' (उर्फ' [') – Lekensteyn

+3

' [1] 'या' [0] 'के बारे में अधिक जानकारी के लिए' मैन टेस्ट 'चलाएं,' परीक्षण '/ '[' एकल पैरामीटर के साथ बस यह जांचता है कि पैरामीटर स्ट्रिंग (यहां '1' या' 0') खाली नहीं है।iow '[" "] 'गलत होगा। – Dummy00001

0

इसका कारण यह है ग्रेप $ शब्द में $ पत्र खोजने में असफल रहा है, इसलिए बाहर निकलने के कोड 1. जब भी है:

आप $? चर का उपयोग कर पिछले निष्पादित आदेश की वापसी मान प्रदर्शित कर सकते हैं लिनक्स में एक प्रक्रिया 0 से अलग कोड लौटाती है तो इसका मतलब है कि यह असफल रहा। 0 का अर्थ सफलतापूर्वक बाहर निकला है। आप दुनिया को स्क्रिप्ट में से echo "Linux" | grep -d "nuxi"; echo $?

दूसरी ओर इस की पुष्टि कर सकते 0 झूठी का अर्थ है और 1 सच मतलब है। तो grep शब्द खोजने में विफल रहा और 1 को बाहर निकलने के कोड के रूप में भेजने के लिए, जो इसे एक वास्तविक मूल्य के रूप में लिया।

7

यूनिक्स भूमि में, 0 से सच है और 1 गलत है।

अपना पहला उदाहरण के लिए:

if [ 1 ] 
then 
    echo "Yes" 
else 
    echo "No" 
fi 

"अगर" के लिए दिया आदेश के निकास कोड की जांच सही/गलत (अर्थात शून्य/गैर शून्य)।

वर्ग कोष्ठक वास्तव में "परीक्षण" कमांड (अधिक जानकारी के लिए "आदमी परीक्षण") और अगर के लिए बाहर निकलें कोड दे।

"परीक्षण 1" (या वास्तव में "परीक्षण any_string") रिटर्न सच (0) तो "हाँ" उत्पादन होता है।

आपके दूसरे उदाहरण के लिए, यह "नो" आउटपुट करता है क्योंकि "नक्सि" "लिनक्स" में नहीं मिलता है, अगर आप "नक्सि" से "नक्स" (शायद यह एक टाइपो था?) बदलते हैं और आसपास की जगहों को हटाते हैं = फिर आपको वह व्यवहार मिलेगा जो आप उम्मीद करते हैं। जैसे

word=Linux 
letter=nux 
if echo "$word" | grep -q "$letter" 
then 
    echo "Yes" 
else 
    echo "No" 
fi 
संबंधित मुद्दे