2011-03-17 10 views
7

शैल स्क्रिप्ट में तुलना कैसे करें?शैल स्क्रिप्ट में तुलना कैसे करें?

या, निम्न स्क्रिप्ट क्यों कुछ प्रिंट नहीं करती है?

x=1 
if[ $x = 1 ] then echo "ok" else echo "no" fi 
+0

प्रथम पंक्ति: ** $ x = 1 ** – Hossein

+5

आप की जरूरत ए ; उसके बाद] और यदि कोई स्थान: 'if [$ x = 1]; फिर "ठीक" गूंजें; अन्य "गूंज" गूंजें; fi' – Sergio

+0

@ सर्जियो यह 'बैश देता है: अप्रत्याशित टोकन के पास वाक्यविन्यास त्रुटि \ 'फिर' –

उत्तर

8
नंबरों की सहायता से

, का उपयोग -eq, -ne, ... बराबरी, नहीं बराबरी के लिए, ...

x=1 
if [ $x -eq 1 ] 
then 
    echo "ok" 
else 
    echo "no" 
fi 

और दूसरों के लिए, == नहीं = का उपयोग करें।

+0

-eq और; इसके बाद] यह 'बैश देता है: अप्रत्याशित टोकन के पास वाक्यविन्यास त्रुटि \ 'फिर' –

+0

बस मेरे' == 'से' -eq' में बदलकर यह अभी भी कुछ भी प्रिंट नहीं करता है .. –

+0

हां, वास्तव में आपको "स्पेस" "प्रत्येक के पहले और बाद में" ["... मैंने अभी एक वैध कोड संपादित किया है। –

1

यह भाषा पर निर्भर करता है। बैश के साथ, आप == ऑपरेटर का उपयोग कर सकते हैं। अन्यथा आप -eq-lt-gt बराबर, निचले स्तर के लिए उपयोग कर सकते हैं।

$ x=1 
$ if [ "$x" == "2" ]; then echo "yes"; else echo "no"; fi 
no 

संपादित करें: जोड़ा रिक्त स्थान == arround और और शॉर्टकट के साथ 2.

+1

आपको "==" के आस-पास की जगहों की आवश्यकता है - '["$ x" == "2"] के साथ अपना आदेश आज़माएं और आप देखेंगे कि यह भी सच है। आपको '[" $ x "=" 1 "]' या '[$ x -eq 1]', या bash '[[$ x == 1]]' या '((x == 1)) की आवश्यकता है –

+0

उस सुधार के लिए धन्यवाद, मैनुअल इंडेंट मुद्दा .. लेकिन [] भी काम करता है। – Aif

4

लघु समाधान और या के साथ परीक्षण किया:

x=1 
(($x == 1)) && echo "ok" || echo "no" 
संबंधित मुद्दे