Expr का उपयोग करके दो नंबर जोड़ना


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
@AlanCurry ऐसे कोई गोले हैं जो समर्थन नहीं कर रहे हैं $()? जहाँ तक मुझे पता है कि यह पॉज़िक्स के लिए आवश्यक है, उदाहरण के लिए सभी पॉज़िक्स संगत गोले का समर्थन करना चाहिए$()
उलरिच डेंगल

1
@UlrichDangel मूल बॉर्न शेल नहीं था $(…), लेकिन इसके बारे में मृत्यु हो गई है (शायद कोई व्यक्ति अभी भी /bin/shसोलारिस पर चल रहा है)।
गिल्स एसओ- बुराई को रोकना '

C शैल समर्थन नहीं करता है $(…)-या कम से कम, सभी संस्करण नहीं।
स्कॉट

चर के चारों ओर दोहरे उद्धरण होने का क्या उद्देश्य है?
kojow7

9

आपने संभवतः पंक्ति में एकल उद्धरण के रूप में बैकटिक्स को गलत समझा है:

sum = 'expr $num1 + $num2'

इसके बजाय प्रयोग करने पर ग्रेग का विकी देखें $(...)

यह उम्मीद के मुताबिक काम करता है:

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

यह भी ध्यान दें कि बराबर चिह्न (चर असाइनमेंट) के आसपास कोई अंतराल नहीं है।


1

exprबॉर्न शेल (यानी श) द्वारा उपयोग किया जाने वाला एक बाहरी कार्यक्रम है । बॉर्न शेल में मूल रूप से सरल अंकगणित करने के लिए कोई तंत्र नहीं था। यह exprbacktick की मदद से बाहरी प्रोग्राम का उपयोग करता है ।

बैकटिक ( ` ) को वास्तव में कमांड प्रतिस्थापन कहा जाता है। कमांड प्रतिस्थापन वह तंत्र है जिसके द्वारा शेल कमांड के एक सेट को निष्पादित करता है और फिर कमांड के स्थान पर उनके आउटपुट को प्रतिस्थापित करता है।

sum=`expr $num1 + $num2`

में बैश (सीमा फिर से शैल) यह निम्नलिखित systax है, यह extrnal कार्यक्रम का उपयोग नहीं होगा expr

sum=$((num1+num2))

अगर हम बाहरी प्रोग्राम का उपयोग करना चाहते हैं expr। हमारे पास निम्नलिखित सिस्टैक्स हैं:

sum=$(expr $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
यह एक बैकटिक है, और इसे $( ... )गोले में इस्तेमाल करने की सलाह दी जाती है । इसके अलावा, समस्या यह है कि ओपी उन जगहों का उपयोग करता है जहां उन्हें नहीं होना चाहिए।
वॉनब्रांड


-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
यह सवाल का जवाब नहीं दे रहा है। कुछ स्पष्टीकरण मदद करेगा।
बर्नहार्ड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.