আপনি যখন কোনও নির্দিষ্ট ফেরতের স্থিতিতে বৈষম্য বজায় রাখতে চান তবে আপনি $?কোনও [আদেশের আর্গুমেন্ট হিসাবে ব্যবহার করতে চান (সেই [আদেশটি কোনও ifবিবৃতিতে শর্তাবলীতে চালিত হয় বা না) কেবল তা হ'ল:
until
cmd
[ "$?" -gt 1 ]
do
something
done
সব তাদের জন্য সিনট্যাক্স if, while, until... বিবৃতি হল
if cmd-list1
then cmd-list2
else cmd-list3
fi
কোনটি রান cmd-list2যদি cmd-list1সফল হয় বা cmd-list3অন্যথায়।
[ "$?" -eq 0 ]কমান্ড কোন সমিতি হয়। এটি $?0 হলে $?0 হয় এবং $?অ-শূন্য যদি এটি শূন্য হয় তবে সেট করে।
আপনি যদি cmdব্যর্থ হয়ে কিছু চালাতে চান তবে তা হ'ল:
if ! cmd
then ...
fi
সাধারণত, আপনার সাথে Tinker প্রয়োজন হবে না $?দিন একা জানি যা মানের অর্থ হল trueবা false। কেবলমাত্র মামলাগুলি যেমন আমি উপরে বলেছি যদি আপনার কোনও নির্দিষ্ট মানকে বৈষম্যমূলক প্রয়োজন হয় বা আপনার যদি পরে এটি সংরক্ষণ করতে হয় (উদাহরণস্বরূপ এটি কোনও ফাংশনের রিটার্ন মান হিসাবে ফেরত পাঠানো হয়) যেমন:
f() {
cmd; ret=$?
some cleanup
return "$ret"
}
এও মনে রাখবেন যে একটি ভেরিয়েবলকে উদ্ধৃত না করা হ'ল স্প্লিট + গ্লোব অপারেটর। এখানে সেই অপারেটরটি চাওয়ার কোনও অর্থ নেই, সুতরাং এটি হওয়া উচিত:
[ "$?" -ne 0 ]
না [ $? -ne 0 ], একা থাকুন [$? -ne 0 ](যা কেবলমাত্র প্রথম অক্ষরটি ধারণ করে [থাকলে কমান্ডটি উত্সাহিত করবে )।$IFS$?
আরও মনে রাখবেন যে ফাংশন সংজ্ঞায়িত করার বোর্ন উপায় হ'ল function-name()একটি কমান্ডের সামনে আটকে থাকা। প্রতিটি বোর্নে শেলের মতো শেল bashএবং yash(এবং এর সাম্প্রতিক সংস্করণগুলি posh) এর ক্ষেত্রে এটি কেবল একটি যৌগিক কমান্ড (যৌগিক কমান্ডগুলি হ'ল {...}বা (...)যেমন for...done, if...fi...
function foo { ... }হয় kshফাংশন সংজ্ঞা সিনট্যাক্স। আপনি এখানে এটি ব্যবহার করতে চান এমন কোনও কারণ নেই।
আপনার কোডটি বহনযোগ্যভাবে (POSIXly) লেখা যেতে পারে:
foo() (
cd -P -- "$FOOBAR" || return # what if the cd failed!
if
<some command>
then
echo 'OK!'
else
echo 'Nope!'
fi
)
এছাড়াও মনে রাখবেন cdছাড়া -Pখুব বিশেষ অর্থ (হ্যান্ডলগুলি পাথ যেগুলিতে হয়েছে ..উপাদান অন্য কোন হুকুম থেকে ভিন্নভাবে), তাই এটা এড়ানোর বিভ্রান্তি স্ক্রিপ্ট অন্তর্ভুক্ত ভাল।
(এই ফাংশন ব্যর্থ হলে ফিরে আসে, falseতবে cdব্যর্থ হলে না <some command>)।
$?একটিifস্টেটমেন্টের সাথে 0 সমান হলে পরীক্ষা করা অর্থহীন,ifএকটি আদেশের প্রত্যাশা করে এবং যদি কমান্ডটি ফিরে আসে0, এটি ব্লকে কোড চালায়। তাইif true; then echo hello; fiপ্রতিধ্বনি হ্যালো যেহেতু কমান্ড হবেtrueফিরে0।