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