2012-05-02 14 views
32

मैं एक bash स्क्रिप्ट मंच पर CPUs की संख्या की जाँच कुशलता से कर, रेपो के लिए विकल्प -j उपयोग करने के लिए है, ... मैं इस का उपयोग करें:बैश में कम से कम दो चरों की गणना कैसे करें?

JOBS=$(cat /proc/cpuinfo | grep processor | tail -1 | sed "s,^.*:.*\([0-9].*\)$,\1,") 
echo -e "4\n$JOBS" | sort -r | tail -1 

यह ठीक काम करता है, महान। लेकिन मैं सोच रहा हूं कि क्या कोई अंतर्निहित फ़ंक्शन था जो केवल इतना करता है, यानि न्यूनतम, या अधिकतम की गणना करता है?

+2

असंबंधित अपने प्रश्न का है, लेकिन क्या अपने 'cat' पाइप लाइन माना जाता है करते हुए? ऐसा लगता है कि 'grep^प्रोसेसर/proc/cpuinfo | sed -n -e '$ s /.*: // p'' उतना ही प्रभावी होगा। – Sorpigal

+0

आप सही हैं, धन्यवाद। –

उत्तर

76

आप MAX(4,$JOBS) प्राप्त करने के लिए इसका मतलब है, इस का उपयोग करें:

echo $(($JOBS>4?$JOBS:4)) 
+4

मेरा मतलब न्यूनतम था, लेकिन हाँ, आपके उत्तर के लिए धन्यवाद! 'echo $ (($ JOBS <4? $ JOBS: 4))' –

+12

धन्यवाद, मुझे '$ (()) नहीं पता था, 'टर्नरी ऑपरेटर का समर्थन किया। बहुत उपयोगी। यदि आप चाहते हैं तो आप इसके अंदर '$' को छोड़ सकते हैं: '$ ((जॉब्स> 4? जॉब्स: 4))' – Tobia

+0

@ एमवीडीएस, आप इसे फ्लोटिंग पॉइंट वैल्यू पर कैसे करेंगे? – Anonymous

20

एक ऐसी ही स्थिति है जहाँ मैं कई चर के बाहर कम से कम की तलाश करनी है, और कुछ अलग समाधान मैंने पाया उपयोगी sort

था
#!/bin/bash 

min_number() { 
    printf "%s\n" "[email protected]" | sort -g | head -n1 
} 

v1=3 
v2=2 
v3=5 
v4=1 

min="$(min_number $v1 $v2 $v3 $v4)" 

मुझे लगता है कि यह सबसे कारगर चाल नहीं है, लेकिन ज्यादा बात चर का एक छोटा सा स्थिर संख्या के लिए, यह नहीं करना चाहिए - और यह त्रिगुट ऑपरेटरों घोंसले की तुलना में अधिक पठनीय है।


संपादित: - निक के महान टिप्पणी जिक्र करते हुए इस विधि तरह उपयोग के किसी भी प्रकार के लिए विस्तार किया जा सकता है:

#!/bin/bash 

min() { 
    printf "%s\n" "${@:2}" | sort "$1" | head -n1 
} 
max() { 
    # using sort's -r (reverse) option - using tail instead of head is also possible 
    min ${1}r ${@:2} 
} 

min -g 3 2 5 1 
max -g 1.5 5.2 2.5 1.2 5.7 
min -h 25M 13G 99K 1098M 
max -d "Lorem" "ipsum" "dolor" "sit" "amet" 
min -M "OCT" "APR" "SEP" "FEB" "JUL" 
+1

यह रणनीति फ़्लोटिंग पॉइंट नंबर, अक्षरों, शब्दों, या किसी और चीज को क्रमबद्ध करने के लिए भी संभाल सकती है, उदाहरण के लिए। मानव पठनीय इकाइयों के साथ संख्या: 'printf"% s \ n "25 एम 13 जी 99 के 10 9 8 एम | sort -h | head -n1' –

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