Linux에서 두 명령의 결과를 수학적으로 추가하는 방법

Linux에서 두 명령의 결과를 수학적으로 추가하는 방법

Debian Linux 셸에서 두 개의 개별 명령의 결과를 추가하여 두 명령의 합을 알 수 있었습니다.

난 노력 했어:

echo $(expr $(du -sh /srv/mysql) + $(du -sh /srv/www))  

그리고 그 변종.

다음을 반환합니다: expr:

"구문 오류: 예기치 않은 매개변수 '/srv/mysql'

"

물론 폴더 등에 대해서도 설명하려고 노력합니다.

답변1

이와 같이:

모든 쉘(bash, zsh, sh, dash...)과 함께 사용할 수 있습니다.

echo "$((
    (
        $(du -s /srv/mysql | awk '{print $1}') +
        $(du -s   /srv/www | awk '{print $1}')
    ) / 1024
))MiB"

또는 간단하게:

du -shc /srv/www /srv/mysql | awk 'END{print $1}'

-c운영자 로서count

답변2

정수를 다루고 있다고 가정하면 ...

나는 이것이 expr구식이고 구식이라고 간주된다는 것을 알았습니다. 여기에는 산술 일치와 정규식 일치라는 두 가지 주요 용도가 있으며 둘 다 대부분의 셸에서 사용할 수 있습니다.

(그런데, "Debian Linux 쉘"은 단지 하나의 것이 아닙니다. Bash나 Dash 또는 나중에 사용자를 추가하거나 변경할 때 실제로 선택한 쉘이 될 수 있습니다.)

산술의 경우 POSIX에서는 /bin/sh$((표현하다)) $((1+2*3))따라서 C의 정수 표현식에 대한 유사한 규칙에 따라 7이 제공되어야 합니다.

원래 질문의 주요 문제점은 출력에 숫자 외에 다른 정보가 포함되어 있다는 것입니다. 가장 먼저 시도해야 할 것은 이러한 숫자를 생성하는 프로그램에 다른 어떤 것도 출력하지 않도록 요청하는 것입니다. 출력은 실패 시에만 필터링됩니다. 이를 수행하는 방법에는 여러 가지가 있지만 가장 간단한 방법은

tr -dc 0-9

숫자가 아닌 것은 모두 제거됩니다.

소수가 필요하다면...

(소수 분수는 일반적으로 1.23과 같은 고정 소수점 숫자이지만 부동 소수점 시스템도 고정 소수점 숫자를 이해하므로 둘 중 하나를 사용할 수 있습니다.)

또한 소수점 이하 자릿수도 처리 expr할 수 없습니다 $((…)). 이를 위해서는 또는 와 같은 bc고정 소수점 또는 부동 소수점이 내장된 별도의 스크립트 언어가 필요하거나 이를 사용해야 합니다 .awkperlpython

관련 정보