스크립트에서 산술 변수를 추가하는 방법


26

폴더에 포함 된 여러 파일의 줄 크기를 누적하고 싶습니다. 다음 스크립트를 작성했습니다.

let a=0
let num=0
for i in folder/*
do
        num=`cat $i | wc -l`
        a=$a+$num
done
echo $a

내가 스크립트의 끝에서 얻는 것은 123 + 234 + 432 + ...이며 산술 연산의 결과가 아닙니다.

답변:


50

산술 평가 구문이 잘못되었습니다. 다음 중 하나를합니다 (먼저 매우 휴대용하지만 천천히, 두 번째는 POSIX 및 Bourne 쉘를 제외하고 휴대용과 Almquist 쉘의 이전 버전, 마지막 세 가지가 필요하다 사용 ksh, bash또는 zsh) :

a=`expr "$a" + "$num"`

a=$(($a+$num))

((a=a+num))

let a=a+num

((a+=num))

또는 전체 for루프를 건너 뛰고 다음을 수행 할 수 있습니다 .

wc -l folder/*

또는 합계 만 원하는 경우 :

cat folder/* | wc -l

또는 zsh 및 해당 mult_ios옵션을 사용하십시오.

wc -l < folder/*

$내부 가 필요 없습니다 ((...)). a=$((a+num))벌써 괜찮습니다
Weijun Zhou

변수가 설정되지 않았거나 널값을 갖는 경우 다른 방법으로 처리하지 않으면 작동합니다.
Bharat

7

이 코드를 사용할 수도 있습니다

    a=`expr $a + $num`
    echo $a

"$ A + $ NUM"+ IN BOTH SIDES OF ON 공간이 있는지를 MAKE


expr 명령을 계산에 사용할 때는 항상 연산자 양쪽에 공간을 두십시오.
user1678213

2

변수 유형을 먼저 선언 할 수 있습니다.

    declare -i a=0
    declare -i num=0

1

죄송합니다. 이전 수정 사항이 다른 게시물에 대한 것이 었습니다. 다음은 원본 스크립트를 약간만 수정 한 것입니다.

a = 0하자
num = 0
폴더 / *의 i
해야 할 것
        num =`cat $ i | 화장실 -l`
        a = $ (에코 $ a + $ num | bc)
끝난
에코 $ a

1
답변이 질문에 대한 답변으로 보이지 않기 때문에 투표하지 않았습니다.
Time4Tea

죄송합니다, 이제 수정되었습니다
Leo

1

대답 은 코드가 유효한 을 지정해야 합니다. 예를 들어 bourne Shell ( sh)에서는 다음 지침 만 유효합니다.

a=$((a+num))
a=$(($a+$num))

@manatwork 나열하는 다른 가능성은 본 쉘에 유효 할 수 있지만 다시 (쉘 bash)


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.