Linuxで2つのコマンドの結果を数学的に追加する方法

Linuxで2つのコマンドの結果を数学的に追加する方法

Debian Linuxシェルでは、2つの別々のコマンドの結果を追加して、2つのコマンドの合計を知ることができました。

私は努力しました:

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時代遅れであり、時代遅れと見なされることがわかりました。これには、算術マッチングと正規表現マッチングという2つの主な用途があり、どちらもほとんどのシェルで使用できます。

(しかし、「Debian Linuxシェル」は単なるものではありません。Bash、Dash、または後でユーザーを追加または変更するときに実際に選択したシェルになることができます。)

算術の場合、POSIXでは/bin/sh$((表現する))$((1+2*3))したがって、Cの整数式に対する同様の規則に従って7を提供する必要があります。

元の質問の主な問題は、出力に数字に加えて他の情報が含まれていることです。最初に試す必要があるのは、これらの番号を生成するプログラムに他の何も出力しないように要求することです。出力は障害時にのみフィルタリングされます。これを行う方法はいくつかありますが、最も簡単な方法は

tr -dc 0-9

数字以外のものはすべて削除されます。

少数が必要な場合...

(小数分数は通常1.23などの固定小数点数ですが、浮動小数点システムも固定小数点数を理解しているため、どちらも使用できます。)

また、小数点以下の桁数も処理exprできません$((…))。これを行うには、またはなどのbc固定小数点または浮動小数点を含む別々のスクリプト言語が必要か、またはそれを使用する必要があります。awkperlpython

関連情報