ব্যাশ স্ক্রিপ্টে প্রস্থান 0, প্রস্থান 1 এবং প্রস্থান 2 এর অর্থ


49

আমি কিছু অনুশীলন অনুশীলন করছি।

একটি স্ক্রিপ্ট লিখুন যা আর্গুমেন্ট হিসাবে একটি মাসের নম্বর দেওয়া হবে এবং এই নম্বরটি একটি মাসের নামে অনুবাদ করবে। ফলাফল stdout এ মুদ্রিত করা হবে।

আমি একটি সমাধান তৈরি করেছি:

#test for number of argument

if [ "$#" -eq 0 ] ; 
then
   echo -e "No argument."
   echo -e "Write a number between 1 and 12."
   exit 1
elif [ "$#" -gt 1 ] ;
then
   echo -e "More than 1 argument."
   echo -e "Write a number between 1 and 12."
   exit 1
else

   numb=$1
   case "$numb" in
      1) echo "Month: January";;
      2) echo "Month: February";;
      3) echo "Month: March";;
      4) echo "Month: April";;
      5) echo "Month: May";;
      6) echo "Month: June";;
      7) echo "Month: July";;
      8) echo "Month: August";;
      9) echo "Month: September";;
     10) echo "Month: October";;
     11) echo "Month: November";;
     12) echo "Month: December";;
      *) echo -e "You wrote a wrong number. Try again with writing number between 1 and 12.";;

   esac
fi
exit 2
exit 0

কী exit 1, exit 0এবং exit 2অর্থ এবং আমরা কেন সেগুলি ব্যবহার করব?


5
একটি সফলভাবে সম্পাদিত কোড ০. কোড সহ প্রস্থান করা উচিত অন্য মানগুলি একটি ত্রুটি নির্দেশ করে। উদাহরণস্বরূপ বিশেষ অর্থ সহ প্রস্থান কোডগুলি
ভি। ওলসেন

2
একটি ব্যাশ স্ক্রিপ্ট একটি সিনেমা থিয়েটারের মতো, সেখানে আলাদা আলাদা উপস্থিতি রয়েছে। প্রস্থান বিবৃতি ব্যাশ ইন্টারপ্রেটারের জন্য প্রস্থানগুলির অবস্থান চিহ্নিত করে। স্ক্রিপ্টটি বরখাস্ত করা হলে, দোভাষীকে নিকটতম প্রস্থান পর্যন্ত চালানো দরকার।
ডিপ্রেশনডানিয়েল

5
যদি আপনি এই কোডটি লিখে থাকেন তবে কীভাবে আপনি এমন বিবৃতি ব্যবহার করেছেন যা আপনি বুঝতেও পারছেন না?
দিমিত্রি গ্রিগরিয়েভ

5
1) আপনি একটি উত্তর গৃহীত অধিকার প্রশ্ন পোস্ট করার পরে। আরও উত্তরের জন্য অপেক্ষা করতে 24 ঘন্টা দিন। 2) গৃহীত উত্তরটি ভুল এবং বিভ্রান্তিকর। সঠিক উত্তরটি হল "প্রস্থান কোডগুলির জন্য কোনও ডিফল্ট অর্থ নেই (0 = সাফল্যের বাইরে); আপনি স্ক্রিপ্ট বিকাশকারী শব্দার্থবিজ্ঞানের সংজ্ঞা দেন"। 3) আপনি যদি এই স্ক্রিপ্টটি তৈরি করে থাকেন তবে আপনি প্রস্থান কমান্ডগুলি কেন যুক্ত করলেন (এগুলির সমস্তটি যৌক্তিকভাবে অতিরিক্তভাবে প্রয়োজন বা আপনি যদি অন্যভাবে ব্যবহার করেন তবে "প্রস্থান 1" এ পড়তে পারেন)।
আনোই

উত্তর:


58

শেল প্রস্থান কোডগুলির জন্য এখানে একটি ভাল রেফারেন্স :

Exit code 0        Success
Exit code 1        General errors, Miscellaneous errors, such as "divide by zero" and other impermissible operations
Exit code 2        Misuse of shell builtins (according to Bash documentation)        Example: empty_function() {}

ক্যাভেট: সঠিক প্রস্থান কোড ব্যবহার করা কোনও প্রয়োজন নয় এবং শেল দ্বারা প্রয়োগ করা হয় না। বিকাশকারীরা যদি এটিকে সঠিক বিবেচনা করে তবে গাইডেন্সটিকে উপেক্ষা করতে পারবেন।


8
সাবধান, যদিও। একটি প্রস্থান কোড মানে কী পুরোপুরি প্রোগ্রামটির বিকাশকারীদের।
মুরু

এছাড়াও, যখন লিঙ্ক উৎস, উন্নত ব্যাশ স্ক্রিপ্টিং গাইড, দাবি "দেখানোর জন্য সংরক্ষিত প্রস্থান কোড" (মূল জোর), যে দাবি উভয় uncited এবং সম্পূর্ণরূপে মিথ্যা
এলিয়াহ কাগন

23

ব্যবহার exitএবং একটি সংখ্যা আপনার স্ক্রিপ্টের ফলাফল সিগন্যাল করার একটি সহজ উপায়। এটি ন্যাশ করে যেভাবে বাশ কমান্ড একটি রিটার্ন কোড আউটপুট করে। বাশ কমান্ড দিয়ে রিটার্ন কোড 0 এর অর্থ সাধারণত ত্রুটি ছাড়াই সবকিছু কার্যকরভাবে সম্পাদিত হয়। exitআপনার স্ক্রিপ্টটি সেই সময়ে কার্যকর করা বন্ধ করে এবং কমান্ড লাইনে ফিরে আসে।

০ এর চেয়ে বড় যে কোনও রিটার্ন কোড কোনও ধরণের ত্রুটি নির্দেশ করে, যদিও কখনও কখনও ত্রুটিটি সমালোচিত না হয় তবে প্রতিটি কমান্ডের জন্য কিছু ডকুমেন্টেশন পাওয়া সম্ভব যা প্রতিটি রিটার্ন কোডের অর্থ কী তা আপনাকে জানায়।

আপনি $?যেমন শেল ভেরিয়েবল ব্যবহার করে শেষ বাশ কমান্ডের রিটার্ন কোড পেতে পারেন:

$ echo "something"
something
$ echo $?
0
$ cp
cp: missing file operand
Try 'cp --help' for more information.
$ echo $?
1

আপনি যখন এটি কোনও স্ক্রিপ্টে ব্যবহার করেন, আপনি যখন এক্সিকিউটিং সম্পন্ন করেন আপনি রিটার্ন কোডটি একইভাবে জিজ্ঞাসা করতে পারেন। সুতরাং আপনি দেখতে পাবেন যে:

exit 2
exit 0

ধরণের অর্থহীন, কারণ আপনি কখনই exit 0অংশে পৌঁছাতে পারবেন না ।


3

সমস্তই নিজের দ্বারা exitশূন্যের একটি প্রস্থান মূল্য, বা আপনার স্ক্রিপ্টের সফল সমাপ্তি বোঝায়। সফল সমাপ্তির ইঙ্গিত দিতে আপনাকে প্রস্থান কমান্ডে শূন্য যুক্তি যুক্ত করতে হবে না। আপনার স্ক্রিপ্ট সফলভাবে প্রস্থান করতে পারে (বা সম্ভবত এটি) এটি একটি ভ্রান্ত শর্তের জন্য পরীক্ষা করেও। এই ক্ষেত্রে আপনি বিশেষত এটি ত্রুটি (বা 1) শর্তের সাথে প্রস্থান করতে চান।

echo -e "Enter numbers 1-4" \c"
read NUM
case $NUM in 
    1) echo "one";;
    2) echo "two";;
    3) echo "three";;
    4) echo "four";;
    *) echo "invalid answer"
       exit 1;;
esac

exitগত লাইনে কমান্ড এ সব সেখানে হতে নেই। এটি শূন্যের সাথে কল করা যেতে পারে বা একেবারেই ডাকা হয়নি। প্রস্থান কমান্ডের 1 টি যুক্তি উল্লেখ না করেই এই সমস্ত ক্ষেত্রে উত্তরটি echo $?শূন্য হবে।

তবে প্রস্থান কমান্ডের 1 টি আর্গুমেন্ট নির্দিষ্ট করে রেসপন্সটি 1 echo $?হবে। সুতরাং প্রস্থান কমান্ডের 1 টি যুক্তিটি ব্যবহার করুন যখন আপনি উল্লেখ করতে চান যে স্ক্রিপ্টটি ত্রুটি শর্তের সাথে প্রস্থান হয়েছে।

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