ผลรวมของเอ็นตัวเลขที่ป้อนมาแป้นพิมพ์โดยในตบสคริปต์

0

คำถาม

คนแรกขอโทษสำหรับ"ของฉันภาษาอังกฤษ".

ฉันต้องสร้างสคริปต์นั่นมันของฉันสำหรับตัวเลขผ่านต้องแป้นพิมพ์และการเพิ่มพวกเขาและแสดงค accumulated จำนวนเงิน และโปรแกรมจะจบลงตอนที่คุณเติมลบเบอร์

ฉันต้องทำตามสคริปต์ซึ่งทำงานแต่ฉันไม่เชื่อกับการใช้ของ seq ในสำหรับใช้เป็นข้อ accumulator มันไม่ได้เกิดขึ้นกับฉันต้องทำมันหรอกหากมีทางเลือกอื่น

วิธีที่จะทำให้มันมากกว่า...แห่งเหล่าอัศวินราชินีและอสร??

แก้ไข:แบบเรียบร้อยสวยงามไม่ใช่คำพูด,แต่ถ้าสิ่งที่ฉันทำคือคำตอบที่ถูกต้องในตบหรือมีหนทางที่จะทำอย่างมัน"normative"หรือ"น้อยแปลก"...

ขอบคุณ!

#!/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 เปลือกหอย,expands ต้องรายการของ positional พารามิเตอร์(ในกรณีนี้ที่อาร์กิวเมนต์สคริปต์)โดยแยกแต่ละตัวด้วยอักขระแรกของเงินเงื่อนไข(หรือพื้นที่ถ้า$เงื่อนไขคือยกเลิกตั้งค่าหรือไม่มีอะไรถ้า$เงื่อนไขว่างเปล่า). $((...))เป็นภายในเชลล์รวมอัตโนมัติ expansion โอเปอเรเตอร์(โปรดสังเกตว่ามันสนับสนุนทศนิยม,octal และค่าฐานสิบหกตัวเลข)

ถ้าคุณต้องการตัวเองลอยเคว้งคว้าประเด็นสนับสนุนซึ่งคุณจะต้องแตกต่างเชลล์เหมือน ksh93 หรือ zsh(ไม่ตบมือตบเดียวที่สนับสนุนจำนวนเต็มรวมอัตโนมัติ)แม้ว่าคุณอาจใช้ภาษาโปรแกรม awklanguage section:

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

มันจะใช้นาน(สำหรับจำนวนเต็ม)และสอง(สำหรับตัวเองลอยเคว้งคว้างจุด)ประเภทตัวเลขเป็นการจัดเตรียมไว้โดยระบบของคุณ ที่นำเข้าข้อมูลตัวเลขต้องเป็นทศนิยมตัวลอยบินบนฟ้าหรือวิศวกรรมเครื่องหมายไว้ที่ปฎิทินในรูปแบบภาษาอังกฤษ(ตัวเองลอยเคว้งคว้างจุดตัวแบ่งเขตด้านซ้ายคือช่วงเวลาตัวละครโดยไม่คำนึงถึงของค่าท้องถิ่น). กับบางอย่าภาษาโปรแกรม awklanguage section implementations มันจะผิดพลาดถ้าคนจำนวนแรกเป็นลเป็นภาษาโปรแกรม awklanguage section จะพยายามตีความเรื่องมันเป็นทางเลือก

บางอย่าภาษาโปรแกรม awklanguage section implementations เหมือน GNU ภาษาโปรแกรม awklanguage section ตอนที่ POSIXLY_CORRECT อยู่ในสภาพแวดล้อมยังสนับสนุนเลขฐานสิบหกรวมถึงกับไบนารีเอ็กซโปเน็นเชียล notations. หรือกับ..คนที่ไม่ใช่ทศนิยม-ข้อมูลของมันเข้าใจ octals และเลขฐานสิบหก:

$ 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

ที่ทุกเนิร์ดของฉันต้องของตัวเองตบบสคริปต์ comment เห็น 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ý
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่