This tutorial explains Linux “bc” command, options and its usage with examples.

**DESCRIPTION**

The bc command is an interactive process that provides arbitrary-precision arithmetic. The bc command first reads any input files specified by the File parameter and then reads the standard input. The input files must be text files containing a sequence of commands, statements, or function definitions that the bc command can read and execute.

bc utility is surely one of the underdogs when it comes to calculations on command line.

**SYNOPSIS**

bc [-c] [-l] [file]

OPTIONS

**-c**

Compile only. The output is dc commands that are sent to the standard output.

**-l**

Define the math functions and initialize scale to 20, instead of the default zero.

**file**

Name of the file that contains the bc commands to be calculated this is not a necessary command.

**USAGE**

**L**

A letter a-z

**E**

An expression: a (mathematical or logical) value, an operand that takes a value, or a combination of operands and operators that evaluates to a value.

**S**

Statement

**/* and /***

Comment

**sqrt ( E )**

Square root

**length ( E )**

Number of significant decimal digits.

**scale ( E )**

Number of digits right of decimal point.

**quit**

Exits the bc command.

**Math Functions: **

The built-in math functions supported are:

s (x) : The sine of x, x is in radians.

c (x) : The cosine of x, x is in radians.

a (x) : The arctangent of x, arctangent returns radians.

l (x) : The natural logarithm of x.

e (x) : The exponential function of raising e to the value x.

j (n,x): The bessel function of integer order n of x.

sqrt(x): Square root of the number x.

In addition to the math functions, the following functions are also supported.

length(x) : returns the number of digits in x

read() : Reads the number from the standard input.

**Available Operators**

+ – * / % ^

(% is remainder; ^ is power)

++ — (prefix and postfix; apply to names)

== = != = =+ =- =* =/ =% =^

**Functions: **

A function is a code block which executes logically related functionality and returns a value. The syntax of creating a function is

define function-name(comma separated parameters list) { statements return statement }

**Iterative Statements:**

Bc command supports the for and while loop for doing iterations. The syntax of for and while loop are shown below:

for (assignment; condition; increment) { statements } while (condition) { statements }

**Conditional Statement: **

Conditional statements are used to take decisions and execute statements based on these decisions. Bc command supports the if condition. The syntax of if statement is

if(condition) { statements} else {statements}

**EXAMPLES
**

1. Basic calculations

$ bc <<< 5*4 20 $ bc <<< 5+4 9

There is another way of doing the same by using echo command.

Here are some examples:

$ echo "5*4" | bc 20 $ echo "5+4" | bc 9 $ echo "5-4" | bc 1

2. Calculations of expression in file by directing the file to bc

$ cat calcFile 5+5 6+7 $ bc < calcFile 10 13

3. Calculating square root and concept of scale

$ echo "sqrt(10)" | bc 3 $ echo "scale=1;sqrt(10)" | bc 3.1 $ echo "scale=10;sqrt(10)" | bc 3.1622776601

We see that the value assigned to variable ‘scale’ decides the number of post decimal digits. If ‘scale’ is not specified then number of post decimal digits are taken as 0.

4. Variables and bc

$ x=`echo "5-4" | bc` $ echo $x 1

So we see that by using back ticks you can store the result in a variable.

5. Base Conversion

-> Convert decimal to hexadecimal

$ echo 'obase=16;128' | bc 80

-> Convert hexadecimal to decimal

$ echo 'ibase=16;obase=A;80' | bc 128

-> Convert decimal to binary

$ echo 'obase=2;128' | bc 10000000

-> Convert binary to decimal

$ echo 'ibase=2;obase=A;10000000' | bc 128

6. Conditional Statement Example

$ echo 'if(1 == 2) print "true" else print "false"' | bc false

7. Example of functions and iterative statements

$cat arth_expr.dat 2+5; var = 10*3 var print var define sum(a,b) { return a+b } sum(3,5) quit $ bc arth_expr.dat bc 1.06 Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc. This is free software with ABSOLUTELY NO WARRANTY. For details type `warranty'. 7 30 30 8

Be default the bc command prints the welcome message(version, copyright message. You can suppress this welcome message by using the -q option with bc command

$ bc -q arth_expr.dat

** Sanfoundry Global Education & Learning Series – 1000 Linux Tutorials.**