गणित आसान है, Bash स्क्रिप्टिंग आसान है, इसलिए Bash/Shell स्क्रिप्ट में गणित/अंकगणित करना भी आसान होना चाहिए। यह है। यहां बताया गया है कि कैसे करना है।
इंटीजर के साथ काम करना
Bash का बिल्ट-इन अंकगणित केवल पूर्णांक (पूर्ण संख्या) मानों को संभाल सकता है। यदि आप एक गैर-पूर्णांक मान के साथ वेरिएबल घोषित करने का प्रयास करते हैं:
declare -i e=2.5
आप निम्न देखेंगे:
bash: declare: 2.5: syntax error: invalid arithmetic operator (error token is ".5")
गैर-पूर्णांक संख्याओं के साथ काम करने के लिए, आपको अपनी गणना करने के लिए एक बाहरी प्रोग्राम का उपयोग करना होगा – लेकिन पहले, यहां बताया गया है कि इंटीजर के साथ काम करने के लिए बिल्ट-इन Bash अंकगणित का उपयोग कैसे करें।
वेरिएबल घोषणा का उपयोग करना
यदि आपके वेरिएबल declare स्टेटमेंट का उपयोग करके पूर्णांक के रूप में घोषित किए गए थे, तो आप बिना किसी विशेष विचार के अंकगणित कर सकते हैं:
# वेरिएबल को पूर्णांक के रूप में घोषित करना declare -i x=4 declare -i y=2 # पूर्णांक वेरिएबल के साथ अंकगणित करना result=x/y echo $result
यह लौटाएगा:
2
यदि वेरिएबल पूर्णांक के रूप में घोषित हैं तो गणितीय स्टेटमेंट को मूल्यांकन के लिए ब्रैकेट में लपेटने की आवश्यकता नहीं है।
डबल ब्रैकेट/पैरेंथेसिस का उपयोग करना
यदि आपके वेरिएबल विशेष रूप से पूर्णांक के रूप में घोषित नहीं किए गए थे, स्क्रिप्ट पैरामीटर के रूप में पास किए गए थे, या किसी प्रोग्राम से आउटपुट थे, तो वे डिफ़ॉल्ट रूप से स्ट्रिंग्स के रूप में व्यवहार किए जाएंगे।
Bash में स्ट्रिंग्स के साथ अंकगणित से निपटने की क्षमता है – लेकिन केवल तभी जब एक्सप्रेशन को डबल ब्रैकेट का उपयोग करके अंकगणितीय एक्सप्रेशन के रूप में फ़्लैग किया गया हो। नीचे उदाहरण देखें:
x = 6 ((y=$x+3)) echo $y
उपरोक्त Bash स्क्रिप्ट स्निपेट एक्सप्रेशन के सही मूल्यांकन को आउटपुट करेगा:
9
…क्योंकि ब्रैकेटेड अंकगणितीय एक्सप्रेशन को संख्या वाले वेरिएबल वाले के रूप में ठीक से व्याख्या किया गया है, बजाय उन्हें स्ट्रिंग्स के रूप में व्यवहार करने के।
ब्रैकेट के बिना:
y=$x+3
आपको आउटपुट मिलेगा:
6+3
एक्सप्रेशन को दो स्ट्रिंग्स को जोड़ने के रूप में माना जाएगा और मूल्यांकन नहीं किया जाएगा।
समर्थित गणितीय ऑपरेटर
Bash बिल्ट-इन अंकगणित निम्न ऑपरेटरों का समर्थन करता है:
| + | जोड़ |
| – | घटाव |
| ++ | इन्क्रीमेंट |
| — | डिक्रीमेंट |
| * | गुणा |
| / | भाग |
| % | शेष |
| ** | घातांक |
बूलियन और अंकगणित
डबल ब्रैकेट बूलियन ऑपरेटर का उपयोग करते समय भी देखे जाते हैं, क्योंकि मूल्यांकन एक्सप्रेशन 0 या 1 लौटाएगा:
if (( x > y )); then echo "x is greater than y" fi
Bash बूलियन ऑपरेशन के बारे में अधिक यहां देखें
दशमलव मानों के साथ काम करना
bc कमांड का उपयोग करना
जैसा कि लेख में पहले दिखाया गया है, गैर-पूर्णांक मानों के साथ Bash अंकगणित का उपयोग करने का परिणाम त्रुटि में होगा।
bc कमांड दशमलव मानों (और अधिक जटिल गणित) को संभाल सकता है। यहां सिंटैक्स है:
bc OPTIONS FILE
जहां:
- OPTIONS विकल्पों की एक सूची है (विकल्पों की पूरी सूची के लिए यहां देखें)
- FILE हल की जाने वाली अंकगणित वाली टेक्स्ट फ़ाइल का पथ है।
चूंकि bc पाइप किए गए इनपुट को स्वीकार करेगा, आपको अपना समीकरण फ़ाइल में स्टोर करने की आवश्यकता नहीं है; आप इसे सीधे कंसोल से पाइप कर सकते हैं:
echo "2.32+3.45" | bc
…जो सही उत्तर आउटपुट करेगा:
5.77
पाइपिंग और कमांड-लाइन एप्लिकेशन इनपुट/आउटपुट रीडायरेक्ट करने पर पूरी जानकारी यहां देखें।
आप निम्न चलाकर पूर्ण bc उपयोगकर्ता मैनुअल देख सकते हैं:
man bc
bc कमांड के लिए जटिल गणित के लिए बहुत उन्नत सिंटैक्स है, जिसे उपयोगकर्ता मैनुअल में विस्तार से बताया गया है।