प्रसिद्ध while condition; do ...; done
लूप है, लेकिन क्या कोई do... while
स्टाइल लूप है जो ब्लॉक के कम से कम एक निष्पादन की गारंटी देता है?
प्रसिद्ध while condition; do ...; done
लूप है, लेकिन क्या कोई do... while
स्टाइल लूप है जो ब्लॉक के कम से कम एक निष्पादन की गारंटी देता है?
जवाबों:
एक बहुत बहुमुखी संस्करण do ... while
इस संरचना है:
while
Commands ...
do :; done
एक उदाहरण है:
#i=16
while
echo "this command is executed at least once $i"
: ${start=$i} # capture the starting value of i
# some other commands # needed for the loop
(( ++i < 20 )) # Place the loop ending test here.
do :; done
echo "Final value of $i///$start"
echo "The loop was executed $(( i - start )) times "
जैसा कि यह है (कोई मूल्य निर्धारित नहीं है i
) लूप 20 बार निष्पादित होता है।
UN- टिप्पणी जो i
16 पर सेट होती है i=16
, लूप को 4 बार निष्पादित किया जाता है।
के लिए i=16
, i=17
, i=18
और i=19
।
यदि मैं एक ही बिंदु (प्रारंभ) पर 26 को बताता हूं (चलो), कमांड को अभी भी पहली बार निष्पादित किया जाता है (जब तक कि लूप ब्रेक कमांड का परीक्षण नहीं किया जाता है)।
थोड़ी देर के लिए परीक्षण सत्य होना चाहिए (बाहर निकलने की स्थिति 0)।
परीक्षण को एक लूप के लिए उलट दिया जाना चाहिए, अर्थात: मिथ्या होना (निकास स्थिति नहीं 0)।
POSIX संस्करण को काम करने के लिए कई तत्वों की आवश्यकता है:
i=16
while
echo "this command is executed at least once $i"
: ${start=$i} # capture the starting value of i
# some other commands # needed for the loop
i="$((i+1))" # increment the variable of the loop.
[ "$i" -lt 20 ] # test the limit of the loop.
do :; done
echo "Final value of $i///$start"
echo "The loop was executed $(( i - start )) times "
./script.sh
this command is executed at least once 16
this command is executed at least once 17
this command is executed at least once 18
this command is executed at least once 19
Final value of 20///16
The loop was executed 4 times
set -e
भी चीज का उपयोग करते हैं, जबकि स्थिति ब्लॉक के निष्पादन को रोकने वाली नहीं है: जैसे set -e; while nonexistentcmd; true; do echo "SHiiiiit"; exit 3; done
-> शिट होता है। इसलिए, यदि आप इसका उपयोग करते हैं, तो आपको त्रुटि से निपटने के लिए वास्तव में सावधान रहना होगा यानी चेन सभी कमांड के साथ &&
!
वहाँ नहीं है ... जबकि या करते हैं ... लूप तक, लेकिन एक ही चीज़ को इस तरह पूरा किया जा सकता है:
while true; do
...
condition || break
done
जब तक:
until false; do
...
condition && break
done