2017-09-04 9 views
0

誰かが私のsambaサーバーからデータをストリーミングしているかどうかを確認するスクリプトを書いておきたいと思います。そのために、私はこのようなスクリプトを作ってみた:bashの変数をstdoutに出力しないで

$ cat /home/ron/scripts/keepup.sh 
#!/bin/bash 

exec=`nethogs -t -c 1| awk '/smbd/ {print $2}'` 

sent=$exec 

echo "result: "$sent 
sent="($sent+0.5)/1" | bc 
echo "rounded: "$sent 
if [[ $sent -gt 0 ]] 
then 
    echo "music is playing" 
else 
    echo "quiet" 
fi 

が、私は得る:

Waiting for first packet to arrive (see sourceforge.net bug 1019381) 
result: 6.73438 
rounded: 6.73438 
/home/ron/scripts/keepup.sh: line 10: [[: 6.73438: syntax error: invalid arithmetic operator (error token is ".73438") 
quiet 

、それは明らかに真の結果、「6.73438」を計算する必要がありますが。私の丸めが正しく機能していないようです。私は周りのグーグルでは、エコーまたはprintfを使用して答えが見つかりましたが、それは丸ごとの結果をif条件にフィードしたいので、必要なものはnptです。

答えて

4

これは間違っている:

sent=$(bc <<< "($sent+0.5)/1") 

または::あなたが必要

sent="($sent+0.5)/1" | bc 

sent=$(echo "($sent+0.5)/1" | bc) 
1

bcは、丸めを行っていません。これらのテストを考えてみましょう:

$ a="17.928671"; a=$(bc -l <<<"scale=3; $a/1");echo "$a" 
17.928 

$ a="17.928671"; a=$(printf '%.3f\n' "$a");echo "$a" 
17.929 

は約bcscaleオプションは、小数点以下の桁数(スケール= 3)の数を調整するために使用することができますが、順番にこのscale=3が分裂を受信するbcを期待をアクティブにすることを検討してください。

結果として、丸めが必要な場合は、私は使用することをお勧めしますprintf

関連する問題