2009-09-09 23 views
5

मैं किसी और द्वारा लिखी गई एक बैश स्क्रिप्ट को अपडेट करने की कोशिश कर रहा हूं और मैं उस लाइन में आया हूं जिसके बारे में मुझे यकीन नहीं है।शैल स्क्रिप्ट परीक्षण

किसी को भी मुझे बता सकते हैं क्या निम्नलिखित की जांच करता है:

if [ :$RESULT != :0,0 ] 

मैं संभवतः सबस्ट्रिंग के साथ $ परिणाम में कुछ मान को चेक मान लेते हैं?

किसी भी मदद की सराहना की!

उत्तर

4

मुझे लगता है कि : एक सामान्य चाल है जो लोग परिवर्तनीय खाली होने पर उपयोग करते हैं।

यदि यह खाली है, तो खोल इस होगा:

if [ != 0,0 ] 

जो एक सिंटैक्स त्रुटि होगा। सामने : लाना अर्थ है कि यदि चर खाली है खोल इस है:

if [ : != :0,0 ] 

जो एक सिंटैक्स त्रुटि नहीं है और होगा (सही) झूठी रिपोर्ट।

11

आदेश [ सिर्फ आदेश test के उपनाम है, बंद करने वर्ग कोष्ठक सिर्फ sytax चीनी (आदेश [ अंतिम तर्क पर ध्यान नहीं देता है, तो यह एक बंद कोष्ठक है) किया जा रहा है, तो लाइन वास्तव में पढ़ता है

if test :$RESULT != :0,0 

यह तुलना करता है यदि स्ट्रिंग :$RESULT स्ट्रिंग :0,0 के बराबर होती है। इस मामले के लिए कोलन प्रीपेड किया गया है कि परिवर्तनीय $RESULT खाली है। लाइन निम्नलिखित कैसा लगेगा अगर बृहदान्त्र बाहर रखा गया था और $RESULT कोई रिक्त स्ट्रिंग था:

if test != 0,0 

यह किसी त्रुटि के लिए नेतृत्व करेंगे के बाद से test!= से पहले एक बहस की उम्मीद है। , हालांकि

if test "$RESULT" != 0,0 
# Will become 
if test "" != 0,0 

भिन्नता तुम्हें तैनात अधिक पोर्टेबल है: एक वैकल्पिक उद्धरण चिह्नों का उपयोग करने के लिए इंगित करने के लिए एक तर्क है, जो एक रिक्त स्ट्रिंग है है कि वहाँ होगा।

+0

'प्रयास करें आदमी bash' और builtin आदेश के लिए खोज' अधिक जानकारी – soulmerge

+0

ठीक है के लिए test', मैं उसका पालन करें, धन्यवाद! तो क्या यह वास्तव में स्ट्रिंग "0,0" की तुलना कर रहा है?मैं केवल इतना पूछता हूं कि परिवर्तनीय परिणाम के पास कभी भी मूल्य नहीं होगा! मुझे आश्चर्य हुआ कि 0,0 कुछ और करता है। शायद एक खाली स्ट्रिंग? –

+0

नहीं, '0,0' एक स्ट्रिंग है और ऑपरेटर '! =' तारों की तुलना करता है, इसलिए यह जांचता है कि '$ RESULT' स्ट्रिंग' 0,0' है या नहीं। 'मैन टेस्ट' आज़माएं। – soulmerge

1

कभी-कभी आपको x दिखाई देगा जिस तरह से आपके उदाहरण में कोलन का उपयोग किया जाता है।

if [[ $RESULT != 0,0 ]] 

डबल ब्रैकेट प्रपत्र अधिक लचीलापन देता है, बेहतर पठनीयता, कम जरूरत से बचने और के हवाले से और कुछ के लिए:

बैश में परीक्षण के इस प्रकार करने के लिए पसंदीदा तरीका डबल वर्ग कोष्ठक का उपयोग करने के लिए है अधिक सुविधाएं। अधिक जानकारी के लिए this page देखें।

आप, संख्यात्मक मूल्य का परीक्षण करने के तार या फ़ाइलों के बजाय, डबल कोष्ठक का उपयोग करना चाहते हैं:

if ((3 + 4 > 6)) 
संबंधित मुद्दे