합의 n 번호를 입력으로 키보드에서 bash 스크립트

0

질문

첫째,죄에 대한"영어".

가하는 스크립트를 만들은 나에게 묻는 숫자에 대한 통과하는 키보드를 추가하고 보여주는 축적된 금액입니다. 프로그램이 종료될 때 당신은 음수를 입력합니다.

나는 다음과 같은 스크립트는 작동하지만 저는 확신하지 않으로 사용하의 서열에 사용하는 어큐뮬레이터는 발생하지 않은 저에게 그것을 할 다른 방법이다.

는 방법을 확인 그것은 우아한??

편집:우아하지 않은 말,하지만 만약 내가 무슨 일을 하는 올바른에서 또는 그것을 할 수있는 방법"규범"또는"보다 적게 이상한"...

감사합니다!

#!/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

첫째로 다음을 사용할 수 있습니다 bash 기능:

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

두 번째 방법은 아닌 반복 variant:

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

을 넣어 위의 스크립트 파일에,합계입니다.

#!/bin/bash

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

그것을 실행하는 다음과 같이

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

세 번째 방법을 추천할 수 있:

가 필요없 bash,일반 sh 할 것뿐만 아니라:

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

$*에 POSIX,껍질을 확장하는 목록의 위치를 매개 변수다(이 경우,인수하는 스크립트)로 구분의 첫 번째 문자$IFS(또는 공간의 경우$IFS 설정이 되어 있지 않는 경우에는 아무것도$IFS 이 비어 있을 경우). $((...))는 쉘 내부산 확장자(주를 지원하는 소수,진 진수 숫자)

필요하신 경우 부동 소수점 지원,그것을 필요로 다른 쉘과 같은 ksh93 또는 zsh(지 bash 로 bash 만 지원하는 정수산),그래도 사용할 수도 있습 awk:

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

를 사용하는 장(정수)그리고 두 번(을 위한 부동 소수점)유형 숫자에 의해 구현됩니다. 입력된 번호해야 부동 소수점 또는 엔지니어링 표기에 영국 스타일(부동 소수점 구분자 기간에 관계없이 문자의 로캘). 일부 awk 구현,그것이 실패하는 경우에는 첫 번호가 부정적으로 awk 려고 것으로 해석하는 옵션입니다.

일부 awk 구현에서는 다음과 같 GNU awk 때 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 고지도 않아도 올바른 여기에.

I'd write it like this:

#!/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

모든 괴상한 난 내 자신의 bash 스크립트 튜토리얼을 참조하십시오 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ý
..................................................................................................................