2011-08-29 6 views
8

मैं 3 जी कनेक्शन पूछने के लिए एक साधारण छोटी लिपि लिखने की कोशिश कर रहा हूं, और अगर कनेक्शन गिरा दिया गया है, तो एक कनेक्शन को बढ़ावा दें।दो समान तारों की मेरी बैश स्ट्रिंग तुलना हमेशा झूठी क्यों है?

मेरी समस्या कमांड के आउटपुट की जांच में है - दो प्रतीत होता है समान तारों का मूल्यांकन बराबर नहीं किया जाता है। मुझे यकीन है कि यहाँ कहीं नोब त्रुटि है!

#!/bin/bash 

echo "Checking connection" 
a="Not connected." 
b=$(./sakis3g status --console) 

if [[ "$a"!="$b" ]]; then 
    echo "Strings not equal:" 
    echo "$a" 
    echo "$b" 
else 
    echo "Strings equal!!" 
fi 

उत्पादन जब चलाएँ:

[email protected]:~$ ./test_3g.sh 
Checking connection 
Strings not equal: 
Not connected. 
Not connected. 

./test_3g.sh | cat -A चलाते समय:

[email protected]:~$ ./test_3g.sh | cat -A 
Checking connection$ 
Strings not equal:$ 
Not connected.$ 
Not connected.$ 
+0

वहाँ अंत में कोई बाहरी न्यू लाइन है, अधिकार के साथ गड़बड़ करने के लिए नहीं है, तो? – Mehrdad

+2

'./test_3g.sh का प्रयास करें। बिल्ली-ए'। यदि आपकी 'बिल्ली' '-A' विकल्प का समर्थन नहीं करती है, तो' ./test_3g.sh | आज़माएं बिल्ली-वी'। –

+0

मुझे नहीं लगता कि कोई बाहरी सफेद जगह है, लेकिन उस पर सही होने में खुशी होगी। @ केथ, मैंने पाइप से आउटपुट को बिल्ली-ए में सवाल जोड़ा है। – jozzas

उत्तर

25

आप ऑपरेटरों के साथ स्पेस डाल करने के लिए है:

if [[ "$a" != "$b" ]]; then ... 

रिक्त स्थान आप एक ही तार के साथ खत्म, "$a!=$b" के बराबर के बिना। और केवल एक स्ट्रिंग का परीक्षण सही होता है यदि वह स्ट्रिंग गैर-खाली है ...

+0

धन्यवाद, मुझे पता था कि यह एक नोब त्रुटि होगी ... – jozzas

+1

आपने मुझे 15 सेकंड तक मार दिया! –

+3

रिक्त स्थान के बिना, अभिव्यक्ति एक एकल स्ट्रिंग है "कनेक्ट नहीं है।! = कनेक्ट नहीं है।"। एक बैश अभिव्यक्ति के रूप में, एक स्ट्रिंग को सत्य के रूप में माना जाता है यदि इसकी लंबाई शून्य है; '[[STRING]]' '[[-n STRING]]' के बराबर है। ('info bash', '\ [\ [' के लिए खोजें, फिर "बैश सशर्त अभिव्यक्ति" नोट का पालन करें।) –

0

शायद sakis3g कार्यक्रम प्रिंट संदेश stdout के बजाय stderr करने के लिए। इस मामले में आप खाली संदेश के साथ अपने संदेश की तुलना करें। stdout में stderr रीडायरेक्ट करने के लिए प्रयास करें:

b=$(./sakis3g status --console 2>&1) 
+0

नहीं, ऐसा नहीं किया, क्षमा करें! मुझे परिणामस्वरूप आपके बी के साथ या बिना 'बी' में संग्रहीत किया जा रहा है। – jozzas

5

case/esac का उपयोग करें। आप if/else के वास्ते बारीकियों

case "$a" in 
"$b") echo "ok";; 
*) echo "not ok";; 
esac 

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

  • कोई संबंधित समस्या नहीं^_^