2012-01-16 10 views
5

मैंने एक शेल स्क्रिप्ट बनाई है जो एक निर्देशिका का आकार पाती है, इसे मानव पठनीय प्रारूप (उदाहरण के लिए, 802 एम या 702 के) में लौटती है। मैं आकार के बीच अंतर की गणना करना चाहता हूं।एक स्क्रिप्ट स्क्रिप्ट में स्ट्रिंग्स (जो संख्याएं हैं) घटाएं

यहाँ मेरी खोल स्क्रिप्ट अब तक बताया गया है:

#!/bin/bash 

current_remote_dir_size=789M 
new_remote_dir_size=802M 
new_size=`echo ${new_remote_dir_size} | grep -o [0-9]*` 
current_size=`echo ${current_remote_dir_size} | grep -o [0-9]*` 

echo "${new_size}-${current_size}" 

लेकिन स्क्रिप्ट का आउटपुट है सिर्फ

- 

मैं कैसे घटाव काम कर सकते हैं?

उत्तर

11

आप $(( और )) में अभिव्यक्ति को लपेटकर बैश में मूल पूर्णांक गणित कर सकते हैं।

$ echo $((5 + 8)) 
13 

अपने विशिष्ट मामले में, मेरे लिए निम्नलिखित काम करता है:

$ echo "${new_size}-${current_size}" 
802-789 
$ echo $((${new_size}-${current_size})) 
13 

अंत में आपका आउटपुट थोड़ा अजीब है। जांचें कि grep अभिव्यक्ति वास्तव में वांछित आउटपुट उत्पन्न करती है। यदि नहीं, तो आपको नियमित अभिव्यक्ति को उद्धरण चिह्नों में लपेटने की आवश्यकता हो सकती है।

+0

हम्म, मुझे अभी भी एक त्रुटि मिलती है। मैंने पिछली पंक्ति को 'echo $ (($ {new_size} - $ {current_size}) में बदल दिया है), लेकिन फिर मुझे एक ऑपरेंड त्रुटि मिलती है। –

+0

@mr_schlomo यह मेरे सिस्टम पर काम करता है। मेरी संपादित पोस्ट देखें। सुनिश्चित करें कि 'grep' वास्तव में काम करता है जैसा आप उम्मीद करते हैं। –

+0

ओउप्स! हां, 'grep' समस्या थी। मैंने बस अपने लिनक्स सर्वर पर अपनी स्क्रिप्ट चलाई और यह काम किया! –

1

आप अपने तार से पत्र पट्टी बाहर कॉल करने के लिए grep की जरूरत नहीं है:

current_remote_dir_size=789M 
current_size=${current_remote_dir_size%[A-Z]} 
echo $current_size # ==> 789 

new_remote_dir_size=802M 
new_size=${new_remote_dir_size%[A-Z]} 
echo $new_size  # ==> 802 

Shell Parameter Expansion देखें बैश के मैनुअल में।

+0

लेकिन यह चुपचाप 802k-789M को घटा देगा। :) –

1

आप सभी की जरूरत है:

echo $((${new_remote_dir_size/M/}-${current_remote_dir_size/M/})) 
  • $ ((ए + बी - 4)) अंकगणित के लिए इस्तेमाल किया जा सकता भाव
  • $ {स्ट्रिंग/एम /} एम कुछ भी नहीं के साथ स्ट्रिंग में बदल देता है । अधिक संभावनाओं और विवरणों के लिए man bash, अनुभाग स्ट्रिंग प्रतिस्थापन देखें।
+0

मुझे इसके साथ एक प्रतिस्थापन त्रुटि मिलती है। –

+0

आप इसे कैसे आमंत्रित करते हैं? –

संबंधित मुद्दे