পিসিক্স শেল স্ক্রিপ্ট না হওয়া পর্যন্ত করুন ... করুন বা করুন ...


16

সুপরিচিত while condition; do ...; doneলুপটি রয়েছে, তবে কি কোনও do... whileস্টাইলের লুপ রয়েছে যা ব্লকের কমপক্ষে একটি প্রয়োগের গ্যারান্টি দেয়?


অনেক ধন্যবাদ শন, আমি উত্তরটি এত তাড়াতাড়ি নির্বাচিত উত্তর হয়ে উঠব বলে আশা করিনি। সুতরাং: নির্বাচনের জন্য ধন্যবাদ।

উত্তর:


15

এর একটি খুব বহুমুখী সংস্করণটির 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 বার কার্যকর করে। 16 এ
সেট iকরা লাইনটি ইউএন-মন্তব্য করে i=16, লুপটি 4 বার কার্যকর করা হয়।
জন্য i=16, i=17, i=18এবং i=19

যদি আমি একই বিন্দুতে (শুরুতে 26 বলি) সেট করে রাখি, কমান্ডগুলি এখনও প্রথমবারে কার্যকর করা হবে (লুপ ব্রেক কমান্ড পরীক্ষা না হওয়া অবধি)।

কিছুক্ষণের জন্য পরীক্ষাটি সত্যবাদী হওয়া উচিত (0 এর প্রস্থান স্থিতি)।
লুপ না হওয়া পর্যন্ত পরীক্ষাটি বিপরীত হওয়া উচিত, অর্থাত: মিথ্যা হবে (প্রস্থান স্থিতি 0 নয়)।

একটি পসিক্স সংস্করণে কাজ করতে বেশ কয়েকটি উপাদান পরিবর্তিত হওয়া দরকার:

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-> বিষ্ঠা ঘটে। সুতরাং, আপনি যদি এটি ব্যবহার করেন তবে আপনাকে ত্রুটি পরিচালনার সাথে সতর্কতা অবলম্বন করতে হবে অর্থাৎ সমস্ত কমান্ড দিয়ে শৃঙ্খলাবদ্ধ &&!
টিমো

17

লুপ না করা পর্যন্ত ... করার সময় বা করার কিছু নেই, তবে একই জিনিসটি এইভাবে সম্পাদন করা যেতে পারে:

while true; do
  ...
  condition || break
done

অবধি:

until false; do
  ...
  condition && break
done

আপনি দুটি লুপের সাথে ব্রেক ব্রেকগুলি ব্যবহার করতে পারেন - সত্য বা মিথ্যা হওয়া পর্যন্ত 'চিরকাল' অর্থ mean আমি বুঝতে পেরেছি যে শর্তটি সুখী-প্রস্থান বা দু: খিত-প্রস্থান করার জন্য কিন্ডা কিছুক্ষণের জন্য বা অবধি নেস সংরক্ষণ করে।
android.weasel
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.