Visit Our UNIX and Linux User Community


Bash Floating point math with bc


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Bash Floating point math with bc
# 1  
Old 08-31-2013
Bash Floating point math with bc

Hello Everyone,

I am currently working on a script to calculate optimal tcp window size

the formula that I am following is

2 x (bandwith speed /8 * Round Trip Time ) = x

This is what I have so far
Code:
#!/bin/bash
echo "Enter connection speed" << Get the speed of the Connection from user
read SPEED
echo "enter ip for far end device" << Enter a ip to ping to get Round trip time
read IP
echo "determine RTT"
RTT=$(ping -c 1 $IP  |grep rtt | cut -d"/" -f5 ) |bc

echo ((2 * $SPEED / 8 * $RTT ))

This is what I get
Code:
Enter connection speed
10
enter ip for far end device
192.168.1.1
determine RTT
./opt-tcpwin.sh: line 12: syntax error near unexpected token `('
./opt-tcpwin.sh: line 12: `echo ((2 * $SPEED / 8 * $RTT ))'|bc

Any help or guidance would be great

thank you all

Last edited by Scott; 08-31-2013 at 03:09 AM.. Reason: Code tags
# 2  
Old 08-31-2013
First off, you should use code tags

Never comment lines like this
echo "Enter connection speed" << Get the speed of the Connection from user
Use hash # like this
echo "Enter connection speed" # Get the speed of the Connection from user

RTT=$(ping -c 1 $IP |grep rtt | cut -d"/" -f5 ) |bc
What are you trying to do with bc here? This does not give any output to bc to work with, remove it.
RTT=$(ping -c 1 $IP |grep rtt | cut -d"/" -f5 )

echo ((2 * $SPEED / 8 * $RTT ))
Here you miss the $ to do the math
echo $((2 * $SPEED / 8 * $RTT ))
Not sure why it still does not work so I have change it to awk

Do also use parantheses to make sure you have the math correctly
Code:
echo $(( (3*8)/(2*4) ))
3

compare to
Code:
echo $(( 3*8/2*4 ))
48

Code:
#!/bin/bash
echo "Enter connection speed" # Get the speed of the Connection from user
read SPEED
echo "enter ip for far end device" # Enter a ip to ping to get Round trip time
read IP
echo "determine RTT"
RTT=$(ping -c 1 $IP | awk -F/ 'END {print $5}')
awk -v s=$SPEED -v r=$RTT 'BEGIN {print (2*s)/(8*r)}'

# 3  
Old 08-31-2013
Hi.

This is script s1:
Code:
#!/usr/bin/env bash

set -x
SPEED=50000
IP=8.8.8.8
s1="scale=0"
s2=$(ping -c 1 $IP  |grep rtt | cut -d'/' -f5 )
printf -v RTT "%.0f\n" $(ping -c 1 $IP  |grep rtt | cut -d'/' -f5  )

# echo ((2 * $SPEED / 8 * $RTT ))
echo $(( (2 * $SPEED) / (8 * $RTT) ))

echo or:

echo "$s1;(2*$SPEED)/(8*$s2)" | bc

when run, produces:
Code:
% ./s1
+ SPEED=50000
+ IP=8.8.8.8
+ s1=scale=0
++ ping -c 1 8.8.8.8
++ grep rtt
++ cut -d/ -f5
+ s2=48.061
++ ping -c 1 8.8.8.8
++ grep rtt
++ cut -d/ -f5
+ printf -v RTT '%.0f\n' 47.815
+ echo 260
260
+ echo or:
or:
+ echo 'scale=0;(2*50000)/(8*48.061)'
+ bc
260

Adjust parentheses as necessary. See man pages for details.

Best wshes ... cheers, drl
# 4  
Old 09-01-2013
Thank you both for your input

I will let you know how it goes

BMF

Previous Thread | Next Thread
Test Your Knowledge in Computers #816
Difficulty: Medium
In CSS, E#myid matches an E element with a 'myid' class name.
True or False?

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Comparison of floating point numbers in bash

I have the following code snippet in bash if ]; then minm=`echo "$diff" | bc` fi It works well for most of the cases. However lets say diff is -0.17 and minm is -0.0017. In such a case the comparison seems to fail. Is the correct way to compare a mixture of positive and... (12 Replies)
Discussion started by: ngabrani
12 Replies

2. Shell Programming and Scripting

Bash script to print the smallest floating point number in a row that is not 0

Hello, I have often found bash to be difficult when it comes to floating point numbers. I have data with rows of tab delimited floating point numbers. I need to find the smallest number in each row that is not 0.0. Numbers can be negative and they do not come in any particular order for a given... (9 Replies)
Discussion started by: LMHmedchem
9 Replies

3. Shell Programming and Scripting

[BASH] Floating point exception

Heyas I have a script (vhs - video handler script, using ffmpeg) to encode videos. It also encodes a dvd, but until now just non-copy-protected ones, so i've tried to add/implement a vobcopy wrapper to be used by my script. At first it looked quite fine, but when changing from the first VOB... (9 Replies)
Discussion started by: sea
9 Replies

4. Shell Programming and Scripting

[BASH] Regex for floating point number

Hey again, I have a basic regex that tests if a number is a float. Thank you. (5 Replies)
Discussion started by: whyte_rhyno
5 Replies

5. Programming

Floating Point

Anyone help me i cant found the error of floating point if needed, i added the code complete #include <stdio.h> #include <string.h> #include <stdlib.h> #include <ctype.h> typedef struct { int hh; int mm; int ss; char nom; int punt; }cancion; typedef struct... (9 Replies)
Discussion started by: Slasho
9 Replies

6. Shell Programming and Scripting

floating point not recognized by printf in bash

Dear all, I have the following question. Let's say that I have the following script #!/bin/bash value=0.4987865 a=` printf "%6.2f" $value ` b=`echo $value + $value | bc -l` echo $a echo $b exit And the exit is: 0,00 .9975730 Thus, the problem is that the printf order does not... (2 Replies)
Discussion started by: josegr
2 Replies

7. Shell Programming and Scripting

BASH: floating point exception

Hi, guys, today, I have copied a simple script which runs correctly on a computer to another one. But, the latter informs me: Floating point exception! @ ./command_module a b c where command_module is the module compiled by myself. So, I have fixed it by following steps: 1.... (5 Replies)
Discussion started by: mapleleaves
5 Replies

8. Programming

floating point problem

Hi all! Hi all! I am working with a problem to find the smallest floating point number that can be represented. I am going in a loop ,stating with an initial value of 1.0 and then diving it by 10 each time thru the loop. So the first time I am getting o.1 which I wanted.But from the next... (4 Replies)
Discussion started by: vijlak
4 Replies

9. Shell Programming and Scripting

Floating point numeric comparisions in bash

Hi, I am trying to compare 2 floating point numbers 0.8 and 0.15 using bash and get the largest of the two. Can anyone advise. (2 Replies)
Discussion started by: borncrazy
2 Replies

10. Shell Programming and Scripting

Floating Point Division

Does anyone have a simple way of doing floating point ("fp") division? For example, if I divide 3 by 5, I can get 0.6. The built-in calc (`bc`) will perform fp multiplication, but not division, at least not straight-up (i.e., starting bc and just typing in 3/5). I am trying to do this using... (1 Reply)
Discussion started by: gsatch
1 Replies

Featured Tech Videos