আমি যখন নীচে হিসাবে আমার শেলের কমান্ডগুলি চালিত করি, এটি expr: non-integer argument
ত্রুটি প্রদান করে। কেউ আমাকে এই ব্যাখ্যা করুন পারি?
$ x=20
$ y=5
$ expr x / y
expr: non-integer argument
আমি যখন নীচে হিসাবে আমার শেলের কমান্ডগুলি চালিত করি, এটি expr: non-integer argument
ত্রুটি প্রদান করে। কেউ আমাকে এই ব্যাখ্যা করুন পারি?
$ x=20
$ y=5
$ expr x / y
expr: non-integer argument
উত্তর:
সেই ভেরিয়েবলগুলি শেল ভেরিয়েবল। এগুলিকে অন্য প্রোগ্রামে ( যেমন expr
) প্যারামিটার হিসাবে প্রসারিত করতে আপনার $
উপসর্গটি ব্যবহার করতে হবে :
expr $x / $y
এটির অভিযোগের কারণ হ'ল এটি ভেবেছিল যে আপনি বর্ণানুক্রমিক অক্ষরের ( অর্থাৎ অ-পূর্ণসংখ্যার) কাজ করার চেষ্টা করছেন
আপনি যদি শ্যাশ শেল ব্যবহার করে থাকেন তবে আপনি এক্সপ্রেশন সিনট্যাক্স ব্যবহার করে একই ফলাফল অর্জন করতে পারেন:
echo $((x / y))
বা:
z=$((x / y))
echo $z
man bash
প্রম্পটে টাইপ করুন ( q
প্রস্থান করতে)
আমি বিশ্বাস করি এটি ইতিমধ্যে অন্যান্য থ্রেডে উল্লিখিত ছিল:
calc(){ awk "BEGIN { print "$*" }"; }
তারপরে আপনি কেবল টাইপ করতে পারেন:
calc 7.5/3.2
2.34375
আপনার ক্ষেত্রে এটি হবে:
x=20; y=3;
calc $x/$y
বা যদি আপনি পছন্দ করেন তবে এটিকে একটি পৃথক স্ক্রিপ্ট হিসাবে যুক্ত করুন এবং এটি $ PATH এ উপলব্ধ করুন যাতে আপনার সর্বদা এটি আপনার স্থানীয় শেলের মধ্যে থাকবে:
#!/bin/bash
calc(){ awk "BEGIN { print $* }"; }
echo '1 / 3' | bc -l
কেন ব্যবহার করা যাক না; আমি এটি অনেক সহজ মনে করি। আপনি দরকারী খুঁজে পেতে পারেন একটি উদাহরণ এখানে:
start=`date +%s`
# ... do something that takes a while ...
sleep 71
end=`date +%s`
let deltatime=end-start
let hours=deltatime/3600
let minutes=(deltatime/60)%60
let seconds=deltatime%60
printf "Time spent: %d:%02d:%02d\n" $hours $minutes $seconds
আর একটি সহজ উদাহরণ - 1970 সাল থেকে দিনের সংখ্যা গণনা করুন:
let days=$(date +%s)/86400
বেশিরভাগ লিনাক্স বিতরণে ডিফল্ট শেল বাশ। বাশ-এ, ভেরিয়েবলগুলিকে প্যারামিটার বিস্তারের জন্য ডলার সাইন উপসর্গটি ব্যবহার করতে হবে । উদাহরণ স্বরূপ:
x=20
y=5
expr $x / $y
অবশ্যই বাশের পাটিগণিত অপারেটর এবং একটি বিশেষ পাটিগণিত সম্প্রসারণ সিনট্যাক্স রয়েছে , সুতরাং এক্সপ্রার বাইনারিটিকে আলাদা প্রক্রিয়া হিসাবে গ্রহণ করার প্রয়োজন নেই । আপনি শেলটিকে এইভাবে সমস্ত কাজ করতে দিতে পারেন:
x=20; y=5
echo $((x / y))
expr
2013 সালে নিরুৎসাহিত করা হয়
ধরা যাক
x=50
y=5
তারপর
z=$((x/y))
এটি সঠিকভাবে কাজ করবে। তবে আপনি যদি বিবৃতিতে / অপারেটর ব্যবহার করতে চান তবে এটি সমাধান করতে পারে না। সেক্ষেত্রে ডিভ বা ডিভাইড বা অন্য কোনও কিছুর মতো সরল স্ট্রিং ব্যবহার করুন। কোড দেখুন
/
শেল-কেস লেবেল হিসাবে সূক্ষ্মভাবে কাজ করে। যা কাজ করে না তা হ'ল *
উদ্ধৃতি ব্যতীত গুণনের জন্য ব্যবহার করা, এটি হতে পারে যা আপনি আসলে করেছিলেন; যে কারণগুলো এটা কার্যকরভাবে মামলা, যা আপনার উদাহরণে হয় সমস্ত নিম্নোক্ত আইটেমগুলি ওভাররাইড করতে 'devide' এবং 'মডিউল'
দশমিক বিন্দুর পরে সংখ্যাগুলি পেতে, আপনি এটি করতে পারেন: -
read num1 num2
div=`echo $num1 / $num2 |bc -l`
echo $div