UNIX in a Nutshell: System V Edition

UNIX in a Nutshell: System V EditionSearch this book
Previous: Reference: batchChapter 2
Unix Commands
Next: Reference: bdiff
 

bc

bc [options] [files]

Interactively perform arbitrary-precision arithmetic or convert numbers from one base to another. Input can be taken from files or read from the standard input. To exit, type quit or EOF.

Options

-c

Do not invoke dc; compile only. (Since bc is a preprocessor for dc, bc normally invokes dc.)

-l

Make available functions from the math library.

bc is a language (and compiler) whose syntax resembles that of C. bc consists of identifiers, keywords, and symbols, which are briefly described here. Examples follow at the end.

Identifiers

An identifier is a single character, consisting of the lowercase letters a-z. Identifiers are used as names for variables, arrays, and functions. Within the same program you may name a variable, an array, and a function using the same letter. The following identifiers would not conflict:

x

Variable x.

x[i]

Element i of array x. i can range from 0 to 2047 and can also be an expression.

x(y,z)

Call function x with parameters y and z.

Input/Output Keywords

ibase, obase, and scale each store a value. Typing them on a line by themselves displays their current value. More commonly, you would change their values through assignment. Letters A-F are treated as digits whose values are 10-15.

ibase = n

Numbers that are input (e.g., typed) are read as base n (default is 10).

obase = n

Numbers displayed are in base n (default is 10). Note: once ibase has been changed from 10, use digit "A" to restore ibase or obase to decimal.

scale = n

Display computations using n decimal places (default is 0, meaning that results are truncated to integers). scale is normally used only for base-10 computations.

Statement Keywords

A semicolon or a newline separates one statement from another. Curly braces are needed only when grouping multiple statements.

if (rel-expr) {statements}

Do one or more statements if relational expression rel-expr is true; for example:

if (x == y) i = i + 1

while (rel-expr) {statements}

Repeat one or more statements while rel-expr is true; for example:

while (i > 0) {p = p*n; q = a/b; i = i-1}

for (expr1; rel-expr; expr2) {statements}

Similar to while; for example, to print the first 10 multiples of 5, you could type:

for (i = 1; i <= 10; i++) i*5

break

Terminate a while or for statement.

quit

Exit bc.

Function Keywords

define j(k) {

Begin the definition of function j having a single argument k. Additional arguments are allowed, separated by commas. Statements follow on successive lines. End with a }.

auto x, y

Set up x and y as variables local to a function definition, initialized to 0 and meaningless outside the function. Must appear first.

return(expr)

Pass the value of expression expr back to the program. Return 0 if (expr) is left off. Used in function definitions.

sqrt(expr)

Compute the square root of expression expr.

length(expr)

Compute how many digits are in expr.

scale(expr)

Same, but count only digits to the right of the decimal point.

Math Library Functions

These are available when bc is invoked with -l. Library functions set scale to 20.

s(angle)

Compute the sine of angle, a constant or expression in radians.

c(angle)

Compute the cosine of angle, a constant or expression in radians.

a(n)

Compute the arctangent of n, returning an angle in radians.

e(expr)

Compute e to the power of expr.

l(expr)

Compute natural log of expr.

j(n, x)

Compute Bessel function of integer order n.

Operators

These consist of operators and other symbols. Operators can be arithmetic, unary, assignment, or relational.

Arithmetic

+ - * / % ^

Unary

- ++ --

Assignment

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

Relational

< <= > >= == !=

Other Symbols

/* */

Enclose comments.

( )

Control the evaluation of expressions (change precedence). Can also be used around assignment statements to force the result to print.

{ }

Used to group statements.

[ ]

Array index.

"text"

Use as a statement to print text.

Examples

Note that when you type some quantity (a number or expression), it is evaluated and printed, but assignment statements produce no display:

ibase = 8         Octal input
20                Evaluate this octal number
16                Terminal displays decimal value
obase = 2         Display output in base 2 instead of base 10
20                Octal input
10000             Terminal now displays binary value
ibase = A         Restore base 10 input
scale = 3         Truncate results to three places
8/7               Evaluate a division
1.001001000       Oops! Forgot to reset output base to 10
obase = 10        Input is decimal now, so "A" isn't needed
8/7
1.142             Terminal displays result (truncated)

The following lines show the use of functions:

define p(r,n){    Function p uses two arguments
  auto v          v is a local variable
  v = r^n         r raised to the n power
  return(v)}       Value returned
scale = 5
x = p(2.5,2)      x = 2.5 ^ 2
x                 Print value of x
6.25
length(x)         Number of digits
3
scale(x)          Number of places to right of decimal point
2


Previous: Reference: batchUNIX in a Nutshell: System V EditionNext: Reference: bdiff
Reference: batchBook IndexReference: bdiff

The UNIX CD Bookshelf NavigationThe UNIX CD BookshelfUNIX Power ToolsUNIX in a NutshellLearning the vi Editorsed & awkLearning the Korn ShellLearning the UNIX Operating System