আমি কীভাবে বাশ সহ দুটি সংখ্যার (বিয়োগ ইত্যাদি) যুক্ত করতে পারি?


90

আমি এর সাথে নম্বরগুলি এবং অপারেশনটি পড়তে পারি:

echo "First number please"
read num1
echo "Second number please"
read num2
echo "Operation?"
read op

তবে তার পরে আমার সংখ্যা যুক্ত করার সমস্ত প্রচেষ্টা ব্যর্থ হয়েছে:

case "$op" in
  "+")
    echo num1+num2;;
  "-")
    echo `num1-num2`;;
esac

চালান:

First number please
1
Second mumber please
2
Operation?
+

আউটপুট:

num1+num2

... অথবা ...

echo $num1+$num2;;

# results in: 1+2    

... অথবা ...

echo `$num1`+`$num2`;;

# results in: ...line 9: 1: command not found

দেখে মনে হচ্ছে আমি এখনও স্ট্রিংগুলি পাচ্ছি সম্ভবত আমি যখন যুক্ত করার চেষ্টা করব ("2 + 2" পরিবর্তে "4")।


5
আমি আপনার শিরোনাম সম্পাদনা করেছি কারণ এটি একটি ভাল সাধারণ প্রশ্ন, এবং আপনি যদি প্রসঙ্গটি সংকুচিত করেন তবে আপনি বুঝতে পারতেন যে এটির সাথে caseএক লাইন ছাড়া কিছুই করার বা কিছুই করার নেই: echo $num+$numযেহেতু সমস্যাটি ঠিক পুনরুত্পাদন করবে । : প্রোগ্রামিং প্রশ্ন প্রসঙ্গ কমানোর সঙ্গে ধারণা এখানে ব্যাখ্যা করা হয় sscce.org
স্বর্ণকেশ

2
+1 হাই স্বর্ণলোকস, হ্যাঁ এটি পরে আমার কাছে স্পষ্ট হয়ে উঠল, তবে হ্যাঁ আমি আপনার যুক্তির সাথে একমত এবং হ্যাঁ, আরও নির্দিষ্ট এবং 'একবচন' একটি প্রশ্ন আরও ভাল। আমি আপনার সম্পাদনা (গুলি) স্বাগত জানাই :) ধন্যবাদ :)
মাইকেল ডুরান্ট

উত্তর:


116

POSIX শাঁস মধ্যে পাটিগণিত সঙ্গে সম্পন্ন করা হয় $এবং ডাবল প্রথম বন্ধনী (( )):

echo "$(($num1+$num2))"

আপনি যে (সং echo) থেকে বরাদ্দ করতে পারেন :

num1="$(($num1+$num2))"

এছাড়াও আছে expr:

expr $num1 + $num2

কমান্ডের $(())জন্য একটি কাঁটাচামচ / এক্সিকিউট করা এড়ানো থেকে স্ক্রিপ্টিং এ পছন্দনীয় expr


এমনকি সরাসরি echo $(($num1$op$num2))জড়িত না করেও case
manatwork

এখানে কোন caseজড়িত নেই।
স্বর্ণলোকস

1
না, তবে আপনি আক্ষরিক ব্যবহার করেছেন +, সুতরাং caseবিয়োগটি পৃথকভাবে পরিচালনা করার জন্য বাইরের প্রয়োজন হবে ।
manatwork

1
@ মান্যাট ওয়ার্ক: আপনার অর্থ ওপির caseকোড থেকে এটি মুছে ফেলা echo $(($num1$op$num2))- এটি কার্যকর হবে তবে এটি ব্যবহার caseকরা আরও শক্তিশালী যেহেতু আপনি কোনও ডিফল্ট দিয়ে ত্রুটিগুলি পরিচালনা করতে পারেন *
স্বর্ণলোকস

আপনার দুজনের কাছেই +1 আমি কেসটি ব্যবহার করছিলাম (শুরুতে এটি প্রদর্শিত নাও হতে পারে) তবে আপনি উভয়ই বুঝতে পেরেছেন যে সমস্যাটি কেসটি নিয়ে নয়।
মাইকেল ডুরান্ট

13

বিদ্যমান উত্তরটি খাঁটি বাশ, সুতরাং এটি এর চেয়ে দ্রুত হবে তবে এটি কেবল পূর্ণসংখ্যাগুলি পরিচালনা করতে পারে। আপনার যদি ফ্লোট পরিচালনা করতে হয় তবে আপনাকে বাহ্যিক প্রোগ্রামটি ব্যবহার করতে হবে bc

$ echo 'scale=4;3.1415+9.99' | bc
13.1315

scale=4বলে bcচার দশমিক স্থান ব্যবহার করতে। দেখুন man bcআরও তথ্যের জন্য।


মনে রাখবেন যে, যখন bashসঙ্গে ফ্লোটিং পয়েন্ট arithmetics সমর্থন করে না $((...)), অনেক শাঁস ( ksh93, zsh, yashঅন্তত) না। এর সুবিধাটি bcহ'ল এটি নির্বিচারে নির্ভুলতার সমর্থন করে যখন শেল পাটিগণিতগুলি প্রসেসরের doubleধরণের সীমাবদ্ধ । মনে রাখবেন যে আপনার scaleএখানে সেট করার দরকার নেই। সংযোজনের জন্য, scaleপ্যারামিটার ব্যবহার করা হয় না। স্কেলটি 3.1415+9.99অপারেন্ডগুলির থেকে নেওয়া হবে (এখানে 4)।
স্টাফেন চেজেলাস

যদি একটি মান হয় 450এবং অন্যটি ভেরিয়েবলের দশমিক সঞ্চিত থাকে তবে কীভাবে গণিত করবেন $mynumber? উদাহরণস্বরূপ 450-$mynumber,।
সিগুর

@ সিগুর echo "450-$mynumber" | bcএটি করা উচিত। আপনি যদি কোনও পরিবর্তনশীল প্রসারিত করতে চান তবে আপনাকে একক উদ্ধৃতিগুলির পরিবর্তে ডাবল উদ্ধৃতি ব্যবহার করতে হবে।
17-25-28

@ ইভিলসপ, এখন এটি একটি কবজির মতো কাজ করে। ধন্যবাদ।
সিগুর

computedval=$(echo 'scale=10;var1-var2' | bc)কাজ করে না, কাজও করে নাcomputedval=$(echo 'scale=10;$var1-$var2' | bc)
StatsSorceress

5
echo `expr $a + $b`   
echo `expr $a - $b`   
echo `expr $a \* $b`   
echo `expr $a / $b`   

(গুণনের জন্য) \পূর্বে নোট করুন *, পুরো এক্সপ্রেশনটি ব্যাককোটের মধ্যে থাকতে হবে ``


1
exprপ্রয়োজনীয় নয় এবং কোনও আদেশের স্ট্যান্ডার্ড আউটপুটকে কেবল স্ট্যান্ডার্ড আউটপুটে লেখার জন্য এটি ক্যাপচার করা কখনই প্রয়োজন হয় না।
চিপনার


1

আপনি $[ ... ]কাঠামোও ব্যবহার করতে পারেন । এই ক্ষেত্রে, আমরা বাশ-এ বিল্ট-ইন মেকানিজম ব্যবহার করি যা দ্রুত এবং ব্যবহারে আরও কিছু সুবিধাজনক। যেহেতু আমরা জানি যে $ [, এবং] এর মধ্যে সমস্ত কিছুকে একটি অভিব্যক্তি হিসাবে বিবেচনা করা হয়, তাই আমাদের সাথে ভেরিয়েবলগুলির পূর্ববর্তী হওয়ার দরকার নেই $। একইভাবে, আমাদের *এটির মতো ধরণের আচরণ করা থেকে সুরক্ষিত করার দরকার নেই ।

num1=2
num2=3
echo $[num1 + num2]
5

0

আপনি ব্যবহারকারীর কাছ থেকে অনুরোধ করা ইনপুটগুলির ক্রমের ভিত্তিতে মনে হয় আপনি বিপরীত পলিশ স্বরলিপি ব্যবহার করছেন

echo "First number please"
read num1
echo "Second number please"
read num2
echo "Operation?"
read op

আপনি dcসরাসরি (ডেস্ক ক্যালকুলেটর) সরাসরি ব্যবহারের জন্য আরও ভাল করতে পারেন , যেহেতু এটি এর জন্য।

DESCRIPTION
       Dc is a reverse-polish desk calculator which supports unlimited pre-
       cision arithmetic.

উদাহরণস্বরূপ অধিবেশন ব্যবহার করে dc:

$ dc
1 2 + p    # This part is typed; the result comes next.
3
q  # This is also typed.
$

বা, অ-ইন্টারেক্টিভভাবে:

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