2011-11-23 19 views
15

ठीक है, अनिवार्य रूप से इस स्क्रिप्ट कैसी दिखती है, की तरह है:का उपयोग करते हुए "और" बैश में जबकि पाश

while [ $guess != 5 ]; do 

कुछ इस तरह करने के लिए:

echo -n "Guess my number: " 
read guess 

while [ $guess != 5 ]; do 
echo Your answer is $guess. This is incorrect. Please try again. 
echo -n "What is your guess? " 
read guess 
done 

echo "That's correct! The answer was $guess!" 

क्या मैं बदलना चाहते हैं इस लाइन है:

while [ $guess != 5 and $guess != 10 ]; do 

जावा में मुझे पता है "और" कि "& &" लेकिन यह है कि ज काम करने के लिए प्रतीत नहीं होता पहले। क्या मैं थोड़ी देर के लूप का उपयोग कर इस बारे में सही तरीके से जा रहा हूं?

संपादित करें: .. अद्यतन सवाल खोजों में इसे और अधिक उपयोगी बनाने के लिए

+0

जेएफवाईआई कोड गलत है: 'अनुमान लगाना' होना चाहिए, 'अनुमानित अनुमान' नहीं होना चाहिए। –

+0

टाइपो को स्पॉट करने के लिए धन्यवाद :) – Smitty

उत्तर

16

[] ऑपरेटर बैश में test के लिए एक कॉल, जो man test में प्रलेखित है के लिए वाक्यात्मक चीनी है। "या" एक इन्फ़िक्स -o द्वारा व्यक्त की है, लेकिन आप की जरूरत है एक "और":

while [ $guess != 5 -a $guess != 10 ]; do 
+0

हाँ, मेरी गलती "और" वह मुझे इस्तेमाल करनी चाहिए। यह समझाएगा कि जब मैंने पहले कोशिश की तो "-o" काम नहीं किया; मैंने सोचा कि यह केवल तभी लागू होगा जब उसने मुझे कोई त्रुटि दी हो। आपकी त्वरित प्रतिक्रिया के लिए बहुत बहुत धन्यवाद! – Smitty

+0

नोट: यह पॉज़िक्स नहीं है और इसलिए पोर्टेबल नहीं है। –

30

वहाँ प्राप्त करने के लिए आप क्या चाहते हैं 2 सही और पोर्टेबल तरीके हैं।
अच्छा वर्ष shell वाक्य रचना:

while [ "$guess" != 5 ] && [ "$guess" != 10 ]; do 

और bash वाक्य रचना (आपके द्वारा निर्दिष्ट के रूप में):

while [[ "$guess" != 5 && "$guess" != 10 ]]; do 
+0

मुझे बताने के लिए समय निकालने के लिए धन्यवाद, मैंने देखा कि अब मैं दो बयानों को तोड़ नहीं रहा था और यही कारण है कि यह काम नहीं कर रहा था। – Smitty

1

पोर्टेबल और मजबूत तरीका बजाय एक case कथन का उपयोग करने के लिए है। यदि आप इसका उपयोग नहीं करते हैं, तो सिंटैक्स के चारों ओर अपने सिर को लपेटने के लिए कुछ दिखने लग सकते हैं।

while true; do 
    case $guess in 5 | 10) break ;; esac 
    echo Your answer is $guess. This is incorrect. Please try again. 
    echo -n "What is your guess? " 
    read guess # not $guess 
done 

मैं while true इस्तेमाल किया है, लेकिन आप वास्तव में case बयान वहाँ सीधे इस्तेमाल कर सकते हैं। हालांकि, इसे पढ़ने और बनाए रखने के लिए बालों वाली हो जाती है।

while case $guess in 5 | 10) false;; *) true;; esac; do ... 
+0

उत्तर देने के लिए समय लेने के लिए धन्यवाद! जब मैं अपने * निक्स पर हूं लेकिन अगले में मैं इसे देख लूंगा :) – Smitty

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