
Useful Elements for bash Scripts
|
219
Arithmetic
bash is heavily weighted toward text such as commands, arguments, and filenames.
It can evaluate the usual arithmetic expressions (using
+, -, *, /, and other operators)
by surrounding them with a pair of double parentheses:
((expression)). Because
many arithmetic characters—including
*, (, and )—are specially interpreted by the
shell, it’s best to quote shell arguments if they will be treated as math expressions in
the script:
admin@server1:~$ cat arith
#!/bin/bash
answer=$(( $* ))
echo $answer
admin@server1:~$ ./arith "(8+1)*(7-1)-60"
-6
admin@server1:~$ ./arith "2**60"
1152921504606846976
admin@server1:~$
The latest version of bash supports 64-bit integers (–9223372036854775808 to
9223372036854775807). Older versions support only 32-bit integers (with a puny
range of –2147483648 to 2147483647). Floating-point numbers are not supported.
Scripts that need floating-point or more advanced operators can use an external pro-
gram such as bc.
In arithmetic expressions, you can use variables without the
$ character that would
be used to substitute their values in other settings:
admin@server1:~$ cat arithexp
#!/bin/bash
a=$1
b=$(( a+2 ))
echo "$a + 2 = $b"
c=$(( a*2 ))
echo "$a * 2 = $c"
admin@server1:~$ ./arithexp 6
6 + 2 = 8
6 * 2 = 12
admin@server1:~$
If...
Given expressions, you can execute different chunks of code depending on the
results of tests. bash uses the
if ...