जब मैं नीचे के रूप में अपने शेल में कमांड चलाता हूं, तो यह एक रिटर्न देता है 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))
expr2013 में हतोत्साहित किया जाता है
चलो मान लेते हैं
x=50
y=5
फिर
z=$((x/y))
यह ठीक से काम करेगा। लेकिन अगर आप केस स्टेटमेंट में इसका उपयोग करना चाहते हैं तो इसे हल नहीं कर सकते।
उस मामले में, div या devide या कुछ और जैसे सरल तार का उपयोग करें। कोड देखें
/शेल-केस लेबल के रूप में ठीक काम करता है। जो काम नहीं करता है *, उसे उद्धृत किए बिना गुणा करने के लिए उपयोग करना है, जो कि आपने वास्तव में किया था; कि कारणों यह प्रभावी रूप से मामला है, जो अपने उदाहरण में है में सभी निम्न आइटम ओवरराइड करने के लिए 'विभाजित' और 'सापेक्ष'
दशमलव बिंदु के बाद संख्या प्राप्त करने के लिए, आप यह कर सकते हैं: -
read num1 num2
div=`echo $num1 / $num2 |bc -l`
echo $div