এক্সপ্রেস ব্যবহার করে দুটি সংখ্যা যুক্ত করা হচ্ছে


13

আমি বর্তমানে আইটি-তে ডিপ্লোমার জন্য শেল স্ক্রিপ্টিং শিখছি। আমি একটি ছোট স্ক্রিপ্ট লেখার চেষ্টা করছি যা আমাদের দেওয়া টিউটোরিয়ালের একটি হিসাবে দুটি নম্বর যুক্ত করেছে।

echo "Enter two numbers"
read num1 num2
sum = 'expr $num1 + $num2'
echo "The sum is = $sum"

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

sum: =. No such file or directory.
sum: expr $num1 + $num2: No such file or directory

এখানে চিত্র বর্ণনা লিখুন

আমি এটি উবুন্টু এবং ফেডোরা উভয়ই চালনার চেষ্টা করেছি কিন্তু একই ত্রুটি ঘটে। কেউ কি দয়া করে আমাকে বলতে পারেন আমি এখানে কী মিস করছি?


উত্তর:


39

প্রথমে আপনাকে অ্যাসাইনমেন্টের জন্য ফাঁকা স্থানগুলি মুক্ত করতে হবে, যেমন

sum='expr $num1 + $num2'

তারপর আপনি পরিবর্তন করতে হবে 'একটি করতে `বা আরও ভাল করার জন্য $():

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

ব্যবহারের পরিবর্তে exprআপনি সরাসরি নিজের শেলের মধ্যে গণনাও করতে পারেন:

sum=$((num1 + num2))

3
যদি exprপরিবর্তে ব্যবহারের অনুপ্রেরণাটি $((...))ক্লাসিক বোর্ন শেলটির কাছে পোর্টেবল হওয়ার ইচ্ছা থাকে তবে তা এড়ানোও ভাল ধারণা $(...)
অ্যালান কারি

2
@ অ্যালানক্রি কি এমন শেলগুলি সমর্থন করছে না $()? আমি যতদূর জানি এটি পিক্সিকের দ্বারা প্রয়োজনীয়, যেমন সমস্ত পিক্সিক সামঞ্জস্যপূর্ণ শেলগুলি সমর্থন করা উচিত$()
উলরিচ ড্যাঙ্গেল

1
@ অলিরিচডাঙ্গেল আসল বোর্ন শেলটি ছিল না $(…), তবে এটি মারা গেছে (সম্ভবত কোথাও কেউ /bin/shসোলারিসে চলছে )।
গিলস 'অশুভ হওয়া বন্ধ করুন'

সি শেল $(…)সমস্ত সংস্করণ নয় –– বা কমপক্ষে সমর্থন করে না ।
স্কট

ভেরিয়েবলের চারপাশে ডাবল কোট থাকার উদ্দেশ্য কী?
kojow7

9

আপনি সম্ভবত লাইনে একক উদ্ধৃতি হিসাবে ব্যাকটিক্স ভুল লিখেছেন:

sum = 'expr $num1 + $num2'

পরিবর্তে গ্রেগ এর উইকি ব্যবহার দেখুন $(...)

এটি প্রত্যাশার মতো কাজ করে:

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

এছাড়াও লক্ষ করুন সমান চিহ্ন (ভেরিয়েবল অ্যাসাইনমেন্ট) এর চারপাশে কোনও ফাঁক নেই।


1

exprবোর্ন শেল (অর্থাত্ sh) দ্বারা ব্যবহৃত একটি বাহ্যিক প্রোগ্রাম । বোর্ন শেলটিতে মূল সরল পাটিগণিত সম্পাদনের কোনও ব্যবস্থা ছিল না। এটি exprব্যাকটিকের সাহায্যে বাহ্যিক প্রোগ্রাম ব্যবহার করে ।

ব্যাকটিককে ( ` ) আসলে কমান্ড সাবস্টিটিউশন বলা হয়। কমান্ড প্রতিস্থাপন হ'ল প্রক্রিয়া যার মাধ্যমে শেল প্রদত্ত একটি কমান্ডের সেট করে এবং তারপরে কমান্ডের জায়গায় তাদের আউটপুট প্রতিস্থাপন করে।

sum=`expr $num1 + $num2`

ইন ব্যাশ (বোর্ন আবার শেল) এটি নিম্নলিখিত systax আছে, এটা extrnal প্রোগ্রাম ব্যবহার করা হবে না expr

sum=$((num1+num2))

যদি আমরা বাহ্যিক প্রোগ্রামটি ব্যবহার করতে চাই expr। আমাদের নিম্নোক্ত সিনট্যাক্স রয়েছে:

sum=$(expr $num1 + $num2)

0

আপনি যদি ব্যাশ ব্যবহার করছেন তবে আপনি ঠিক এর মতো কিছু করতে পারেন:

sum=$((num1+num2))

-1
#!/bin/bash
function add()
{
sum=`expr $a + $b`
echo "Sum is :$sum";
}

echo "Enter the value of a";
read a
echo "Enter the valure of b";
read b
add

কোড সম্পর্কে কিছু বিবরণ যুক্ত করুন এবং এটি কীভাবে প্রশ্নটি সমাধান করতে সহায়তা করবে?
তেজাস


-2

আপনি একটি একক ব্যাকটিক ( `কী) ব্যবহার করতে পারেন


1
এটি একটি ব্যাকটিক এবং এটি $( ... )শেলগুলির পরিবর্তে ব্যবহার করার পরামর্শ দেওয়া হয় । এছাড়াও সমস্যাটি হ'ল ওপি এমন জায়গাগুলি ব্যবহার করে যেখানে তাদের উচিত নয় n't
ভনব্র্যান্ড


-3
echo "addition of two number"

echo "enter a number"
read a
echo "enter a number"
read b

c=`expr $a + $b`

echo $c

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