की राशि n संख्या में प्रवेश के द्वारा कीबोर्ड में पार्टी की योजना बनाई स्क्रिप्ट

0

सवाल

पहली बार के लिए क्षमा करें, "मेरी अंग्रेजी".

मैं बनाने के लिए एक स्क्रिप्ट है कि मुझसे पूछ संख्या के लिए पारित करने के लिए कीबोर्ड और उन्हें जोड़ने के ऊपर और संचित राशि है । और इस कार्यक्रम का अंत हो जाएगा जब आप एक नकारात्मक नंबर दर्ज.

मैं निम्न स्क्रिप्ट जो काम करता है, लेकिन मैं नहीं हूँ यकीन है के उपयोग के साथ seq में के लिए उपयोग करने के लिए है कि के रूप में एक संचायक, यह नहीं हुआ है मुझे करने के लिए यह करने के लिए किसी भी अन्य तरीका है ।

तरीके से बनाने के लिए इसे और अधिक ... सुरुचिपूर्ण ??

संपादित करें: सुंदर शब्द नहीं है, लेकिन अगर मैं क्या कर रहा हूँ सही है, में पार्टी की योजना बनाई या वहाँ एक तरीका है यह करने के लिए "मानक" या "कम से कम अजीब"...

धन्यवाद!

#!/bin/bash
#accumulated sum of numbers


i=0
sum=0
while [[ true ]]; do

echo "Insert a number: "
read num

if (($num < 0)); then
echo "Negative number, exit..."
break
fi

for i in $(seq $num $num); do
sum=$(($i + $sum))
done
echo "The sum of the previous numbers is $sum"

done 
bash linux script sum
2021-11-23 23:48:45
2
0

सबसे पहले आप निम्न का उपयोग कर सकते बैश समारोह:

sum() {
    local sum=0
    for arg in "$@"; do
        (( sum += arg ))
    done   
    echo $sum
}

दूसरा तरीका है करने के लिए एक गैर-पाशन संस्करण:

{ printf %d+ "$@"; echo 0; } | bc

उदाहरण

डाल के ऊपर एक स्क्रिप्ट फ़ाइल, योग है ।

#!/bin/bash

{ printf %d+ "$@"; echo 0; } | bc

इसे चलाने के लिए की तरह तो:

$ ./sum 4
4
$ ./sum 4 4 5
13

के लिए तीसरा रास्ता मैं सिफारिश कर सकते हैं :

कोई ज़रूरत नहीं है के लिए पार्टी की योजना बनाई, सादा श्री के रूप में करना होगा अच्छी तरह से है:

#! /bin/sh - 
IFS=+; echo "$(($*))"

$* में POSIX के गोले, विस्तार की सूची के लिए स्थितीय मापदंडों (इस मामले में, तर्क करने के लिए स्क्रिप्ट) द्वारा अलग की पहली चरित्र के $आईएफएस (या अंतरिक्ष अगर $आईएफएस सेट नहीं है या कुछ भी नहीं है अगर $आईएफएस खाली है). $((...)) के खोल आंतरिक गणित विस्तार ऑपरेटर (ध्यान दें कि यह समर्थन करता है दशमलव, अष्टाधारी और हेक्साडेसिमल संख्या)

अगर आप की जरूरत है, चल बिन्दु समर्थन के साथ, कि जहां आप की आवश्यकता होगी एक अलग खोल की तरह ksh93 या zsh नहीं है (पार्टी की योजना बनाई के रूप में पार्टी की योजना बनाई केवल का समर्थन करता है पूर्णांक गणित), यद्यपि आप भी उपयोग ऑक:

#! /usr/bin/awk -f
BEGIN {t=0; for (i in ARGV) t+=ARGV[i]; print t}

का उपयोग करेगा कि लंबे समय के लिए (पूर्णांक) और डबल (के लिए चल बिन्दु) के प्रकार की संख्या के रूप में द्वारा कार्यान्वित की अपनी प्रणाली है । इनपुट संख्या होना चाहिए दशमलव चल बिन्दु या इंजीनियरिंग संकेतन में अंग्रेजी शैली (चल बिन्दु सीमांकक अवधि है चरित्र की परवाह किए बिना स्थान). के साथ कुछ ऑक कार्यान्वयन, यह विफल हो जाएगा यदि पहली संख्या है, नकारात्मक रूप में ऑक होगा की व्याख्या करने की कोशिश के रूप में यह एक विकल्प है ।

कुछ ऑक कार्यान्वयन की तरह जीएनयू ऑक जब POSIXLY_CORRECT है, वातावरण में भी समर्थन hexadecimals सहित के साथ बाइनरी प्रतिपादक अंकन. या साथ-गैर-दशमलव-डेटा, यह समझता है octals और hexadecimals:

$ POSIXLY_CORRECT=1 ./sum  0xap3 0xa
90 # (0xa * 2^3) + 0xa
$ awk --non-decimal-data -f ./sum  010
8
2021-11-24 09:05:41
0

seq $num $num से पता चलता अनुक्रमिक संख्या से $num करने के लिए $num और न तो सुंदर और न ही सही यहाँ.

मैं यह लिखने के इस तरह:

#!/bin/bash
#accumulated sum of numbers

i=0
sum=0
while [[ true ]]; do

echo "Insert a number: "
read num

if (($num < 0)); then
echo "Negative number, exit..."
echo "The sum of the previous numbers is $sum"
break
else ((sum+=$num))
fi
done

के रूप में हर बेवकूफ मैं अपने खुद के मार स्क्रिप्टिंग ट्यूटोरियल देखें http://linuxintro.org/wiki/BaBE

2021-11-28 12:52:40

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में