আমি কীভাবে একটি কমান্ড চালাব এবং এর অক্ষর কোডটি কম অক্ষরে পেতে পারি?


13

আমি আমার স্ক্রিপ্টগুলি এভাবে লিখতাম:

some_command
while [ $? -ne 0 ] ; do
    sleep 1
    some_command
done

এটি সর্বদা আমাকে বিরক্ত করেছিল যে আমাকে some_commandদুবার লিখতে হবে । আমি কি এটি কোনওভাবে লুপ টেস্ট বিভাগের ভিতরে রাখতে পারি?

উত্তর:


20

আপনি some_commandআপনার পরীক্ষার শর্ত হিসাবে ব্যবহার করতে পারেন ।

while ! some_command; do sleep 1; done

শর্তটি ততক্ষণ ততক্ষণ থাকবে যতক্ষণ some_commandত্রুটি সহ প্রস্থান করা হবে its

বা যদি আপনি অতিরিক্ত চেক করতে চান তবে আরও ভার্জিক উপায়:

while ! some_command
do 
    # add more if desired
    sleep 1
done

এটি আমার চেয়ে ভাল দেখায়, যদিও এটি ওয়ান-লাইনার ;-)
অ্যান্থন

ব্যর্থতার পরে বেশ কয়েকটি কমান্ড কার্যকর করার প্রয়োজনে ওপি তাকে বিভিন্ন লাইনে বিভক্ত করতে পারে, যদিও :)
জন ডব্লু

এটিকে বহু-লাইন করার জন্য আপনি আধা-কলোনগুলিতে লাইন-ব্রেক করতে পারবেন না এমন কোনও কারণ নেই।
মার্ক স্টুয়ার্ট

1
... বা লিখুনwhile ! some_command; do several; commands; sleep 1; done
অজানা

12

এই কি untilলুপ জন্য:

until some_command
do    sleep 1
done

এটি একটি whileলুপের যৌক্তিক অবহেলা ।

বৈশিষ্ট বলেছেন:

untilলুপ

  • untilলুপ একটানা এক সিদ্ধান্ত নেবে | যৌগ-তালিকা দীর্ঘ আরেকটি যত যৌগ-তালিকা একটি নন-জিরো প্রস্থান অবস্থা হয়েছে।

  • লুপের বিন্যাসটি নিম্নরূপ:

    যৌগিক তালিকা -১ অবধি
    যৌগিক তালিকা -2 করুন
    সম্পন্ন
  • যৌগ-তালিকা -1 মৃত্যুদন্ড কার্যকর হইবে, এবং এটি একটি শূন্য প্রস্থান অবস্থা, হয়েছে থাকে untilকমান্ড সমাপ্ত হবে। অন্যথায়, যৌগিক তালিকা -২ সম্পাদন করা হবে, এবং প্রক্রিয়া পুনরাবৃত্তি হবে।

4

আপনি ঠিক করতে পারেন:

false
while [ $? -ne 0 ] ; do
   sleep 1
   some_command
done

এটির অসুবিধা যদিও এটি সর্বদা এক সেকেন্ড আগে ঘুমায়

আপনি যদি 0 দিয়ে বেরিয়ে আসতে কয়েকটি কমান্ডের বাইরে বেরিয়ে আসতে সক্ষম হন তবে আপনি এটি করতে পারেন:

while true; do
  if [ some_command ] ; then break ; fi
  if [ some_other_command ] ; then break ; fi
  sleep 1
done

যা অবশ্যই জন্য কাজ করে some_command


5
দ্বিতীয় উদাহরণ অন্তর্ভুক্ত করা উচিত [এবং ]কমান্ড প্রায়।
nyuszika7h

2

আমরাও while ! ...না until ...সিস্টেমগুলি POSIX.1-2001 পূর্বে তাদের শেল পরিবেশ স্থগিত কাজ করে। এটি অবশ্য করে।

while :; do
    if some command; then
        break
    fi
    sleep 1
done

আপনার যদি মোট পোর্টেবিলিটিটির প্রয়োজন না হয় তবে আপনি কেন শেল স্ক্রিপ্ট লিখছেন? পার্ল হয় আরো ব্যাশ চেয়ে প্রাপ্তিসাধ্য হওয়ার সম্ভাবনা।

sleep 1 while 0 != system qw(some command);

(উপরে হিসাবে, sleepকমান্ড ব্যর্থ হলে কেবলমাত্র কার্যকর করা হয়))

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.