গাণিতিক সহজ, ব্যাশ স্ক্রিপ্টিং সহজ, তাই ব্যাশ/শেল স্ক্রিপ্টে ম্যাথ/এ্যারিথমেটিক করা সহজ হওয়া উচিত। হ্যাঁ, এটি সহজ। এখানে কিভাবে করবেন সেটা দেখানো হয়েছে।
ইন্টিজার দিয়ে কাজ করা
ব্যাশের বিল্ট-ইন এ্যারিথমেটিক শুধু ইন্টিজার (পূর্ণসংখ্যা) ভ্যালু হ্যান্ডেল করতে পারে। আপনি যদি নন-ইন্টিজার ভ্যালু দিয়ে ভেরিয়েবল ডিক্লেয়ার করার চেষ্টা করেন:
declare -i e=2.5
আপনি নিচের এরর দেখবেন:
bash: declare: 2.5: syntax error: invalid arithmetic operator (error token is ".5")
নন-ইন্টিজার নাম্বার দিয়ে কাজ করতে, আপনাকে এক্সটার্নাল প্রোগ্রাম ব্যবহার করতে হবে ক্যালকুলেশন করার জন্য - কিন্তু আগে, এখানে ব্যাশ বিল্ট-ইন এ্যারিথমেটিক দিয়ে ইন্টিজার দিয়ে কাজ করার পদ্ধতি।
ভেরিয়েবল ডিক্লেয়ারেশন ব্যবহার করে
আপনার ভেরিয়েবলগুলো যদি declare স্টেটমেন্ট দিয়ে ইন্টিজার হিসেবে ডিক্লেয়ার করা থাকে, আপনি কোনো স্পেশাল konsiderেশন ছাড়া এ্যারিথমেটিক পারফর্ম করতে পারেন:
# ভেরিয়েবল ইন্টিজার হিসেবে ডিক্লেয়ার declare -i x=4 declare -i y=2 # ইন্টিজার ভেরিয়েবল দিয়ে এ্যারিথমেটিক result=x/y echo $result
এটি রিটার্ন করবে:
2
ম্যাথেমেটিক্যাল স্টেটমেন্ট ব্র্যাকেটে র্যাপ করতে হয় না ইভ্যালুয়েশনের জন্য যদি ভেরিয়েবল ইন্টিজার হিসেবে ডিক্লেয়ার করা থাকে।
ডবল ব্র্যাকেট/প্যারেনথেসিস ব্যবহার করে
আপনার ভেরিয়েবলগুলো যদি স্পেসিফিক্যালি ইন্টিজার হিসেবে ডিক্লেয়ার করা না থাকে, স্ক্রিপ্ট প্যারামিটার হিসেবে পাস করা থাকে, বা প্রোগ্রাম থেকে আউটপুট আসে, সেগুলো ডিফল্টলি স্ট্রিং হিসেবে বिहেভ করবে।
ব্যাশ স্ট্রিংসহ এ্যারিথমেটিক ডিল করতে পারে - কিন্তু শুধু যদি এক্সপ্রেশনটি ডবল ব্র্যাকেট দিয়ে এ্যারিথমেটিক এক্সপ্রেশন হিসেবে ফ্ল্যাগ করা থাকে। নিচের উদাহরণ দেখুন:
x = 6 ((y=$x+3)) echo $y
উপরের ব্যাশ স্ক্রিপ্ট স্নিপেট এক্সপ্রেশনের সঠিক ইভ্যালুয়েশন আউটপুট করবে:
9
...কারণ ব্র্যাকেটেড এ্যারিথমেটিক এক্সপ্রেশন সঠিকভাবে ইন্টারপ্রেট হয়েছে নাম্বার ধারণকারী ভেরিয়েবল হিসেবে, স্ট্রিং হিসেবে না।
ব্র্যাকেট ছাড়া:
y=$x+3
আপনি পাবেন আউটপুট:
6+3
এক্সপ্রেশনটি দুটি স্ট্রিং জয়েন করার মতো বিবেচিত হতো এবং ইভ্যালুয়েট হয়নি।
সাপোর্টেড ম্যাথেমেটিক্যাল অপারেটর
ব্যাশ বিল্ট-ইন এ্যারিথমেটিক নিচের অপারেটরগুলো সাপোর্ট করে:
| + | যোগ |
| – | বিয়োগ |
| ++ | ইনক্রিমেন্ট |
| — | ডিক্রিমেন্ট |
| * | গুণ |
| / | ভাগ |
| % | রিমেইনডার |
| ** | এক্সপোনেনশিয়েশন |
বুলিয়ান এবং এ্যারিথমেটিক
বুলিয়ান অপারেটর ব্যবহার করার সময়ও ডবল ব্র্যাকেট দেখা যায়, কারণ ইভ্যালুয়েটেড এক্সপ্রেশন ০ বা ১ রিটার্ন করে:
if (( x > y )); then echo "x is greater than y" fi
ব্যাশ বুলিয়ান অপারেশন সম্পর্কে আরও জানতে এখানে দেখুন
ডেসিমাল ভ্যালু দিয়ে কাজ করা
bc কমান্ড ব্যবহার করে
আর্টিকেলের আগে দেখানো হয়েছে, ব্যাশ এ্যারিথমেটিক নন-ইন্টিজার ভ্যালুর সাথে ব্যবহার করলে এরর হবে।
bc কমান্ড ডেসিমাল ভ্যালু (এবং আরও কমপ্লেক্স ম্যাথ) হ্যান্ডেল করতে পারে। সিনট্যাক্স:
bc OPTIONS FILE
এখানে:
- OPTIONS হলো অপশন লিস্ট (ফুল লিস্টের জন্য এখানে দেখুন)
- FILE হলো সমাধান করার এ্যারিথমেটিক থাকা টেক্সট ফাইলের পথ।
bc পাইপড ইনপুট অ্যাকসেপ্ট করে, তাই আপনাকে আপনার ইকুয়েশন ফাইলে স্টোর করতে হবে না; আপনি সরাসরি কনসোল থেকে পাইপ ইন করতে পারেন:
echo "2.32+3.45" | bc
...যে সঠিক উত্তর আউটপুট করবে:
5.77
পাইপিং এবং রিডাইরেক্টিং কমান্ডলাইন অ্যাপ্লিকেশন ইনপুট/আউটপুট সম্পর্কে ফুল রানডাউন এখানে।
bc ইউজার ম্যানুয়াল দেখতে চালান:
man bc
bc কমান্ডের কমপ্লেক্স ম্যাথের জন্য খুব অ্যাডভান্সড সিনট্যাক্স আছে, যা ইউজার ম্যানুয়ালে ডিটেইল আউটলাইন করা আছে।