Bash expr with Examples

Written by: Aditya Harsh   |   Last updated: March 28, 2023

As we know bash variables are of string data type, performing arithmetic operations aren’t straightforward. However, bash provides us with several utilities to carry out arithmetic evaluations. One such command line tool is expr. Using the expr command, you can evaluate any given expression and display the result on the standard output.

Prerequisites

  • A text editor 
  • Access to a terminal

Bash expr

Bash expr is a simple command line tool. It instructs bash to evaluate expressions and display the output on the terminal. It is not just limited to integers, you can use the expr command on strings as well as regular expressions. 

Here’s the syntax:

expr <expression>

Where expression is the expression to be carried out. 

How to use bash expr

In this section, we will understand the use of expr command to perform arithmetic, comparison, and logical operations. We will explore how expr can be used with strings and even regular expressions. We also dive in to learn about command substitution using backticks (`) and how expr acts on variables.

1. Basic arithmetic operations

One of the most common uses of expr command is to perform basic arithmetic operations like addition, subtraction, multiplication, division, and modulus. 

Let’s create a script (exprScript1.sh) by opening your favorite editor and saving it with the following contents:

#!/bin/bash
echo "------------------WITHOUT USING EXPR TO PERFORM ADDITION------------------"

echo 40+2

echo "------------------USING EXPR TO PERFORM ADDITION------------------"

expr 10 + 5		#Notice the spaces between the operands and the operator

echo "------------------USING EXPR TO PERFORM SUBTRACTION------------------"

expr 10 - 5

echo "------------------USING EXPR TO PERFORM MULTIPLICATION------------------"

expr 10 \* 5		#Escape multiplication operator

echo "------------------USING EXPR TO PERFORM DIVISION------------------"

expr 10 / 5

echo "------------------USING EXPR TO PERFORM MODULUS ------------------"

expr 10 % 5

From the above example we can see that without using the expr command, bash will treat the numbers as strings and will print the expression without evaluating it. However, when we use the expr utility, arithmetic functionalities can be performed. One interesting thing to note is that we cannot use the asterisk (*) symbol directly for multiplication because this symbol will behave as a regular expression. As a result, it is important to escape it.

arithmetic operations using expr

2. Comparison operations

The comparison operators are:

  • i <  j : i is less than j
  • i <= j : i is less than or equal to j
  • i =  j : i is equal to j
  • i != j : i is unequal to j
  • i >= j : i is greater than or equal to j
  • i >  j : i is greater than j

Example:

#!/bin/bash
echo "------------------USING EXPR TO CHECK IF EQUAL------------------"

expr 10 = 5		#Notice the spaces between the operands and the operator

echo "------------------USING EXPR TO CHECK IF NOT EQUAL------------------"

expr 10 != 5

echo "------------------USING EXPR TO CHECK GREATER THAN------------------"

expr 10 \> 5

echo "------------------USING EXPR TO CHECK GREATER THAN EQUAL------------------"

expr 10 \>= 5

echo "------------------USING EXPR TO CHECK LESS THAN ------------------"

expr 10 \< 5

echo "------------------USING EXPR TO CHECK LESS THAN EQUAL------------------"

expr 10 \<= 5

The above example demonstrates the use of expr command to perform comparison. The spacing between the operands and the operator is important. Furthermore, escape characters are required when using expr with > or < symbol. As you can notice the output generated is a boolean, either 0 or 1. 0 represents false whereas 1 represents true.

Comparison operations using expr

3. Operations on variables

The expr command can be used on variables and the output can be displayed on the terminal. The result of the expr command can also be stored in another variable. This can be done by making use of backticks (`). Let’s have a look at this example

Example:

#!/bin/bash
a=4
b=2
c=6
d=3
echo "------------------USING EXPR TO PERFORM ADDITION ON VARIABLES------------------"
expr $a + $b
#Alternatively we can store the value in a variable
result=`expr $c + $d`
echo $result

echo "------------------USING EXPR TO PERFORM SUBTRACTION ON VARIABLES------------------"
expr $a - $b
#Alternatively we can store the value in a variable
result=`expr $c - $d`
echo $result


echo "------------------USING EXPR TO PERFORM MULTIPLICATION ON VARIABLES------------------"
expr $a \* $b
#Alternatively we can store the value in a variable
result=`expr $c \* $d`
echo $result

echo "------------------USING EXPR TO PERFORM DIVISION ON VARIABLES------------------"
expr $a / $b
#Alternatively we can store the value in a variable
result=`expr $c / $d`
echo $result

echo "------------------USING EXPR TO PERFORM MODULUS ON VARIABLES------------------"
expr $a % $b
#Alternatively we can store the value in a variable
result=`expr $c % $d`
echo $result

From the above example we can see how we can make use of expr on variables.We can store the result of the computed expression in another variable and carry out further processing as per our needs. The technique of storing the result in the variable using backticks is termed as command substitution and is not just limited to expr. Using backticks, we can assign the output of any command to a variable. 

variable operations using expr

4. Operations on strings

This command line utility can be used on strings as well. You can find the length of the string, match two strings and even get the substring. 

 Here’s an example:

#!/bin/bash
var=England
var2=Ice

echo "------------------ USING EXPR TO FIND LENGTH------------------"

expr length  "Iceland"
expr length $var

echo "------------------ USING EXPR TO FIND SUBSTRING ------------------"

expr substr  "Iceland" 2 3
expr substr $var 2 3

echo "------------------ USING EXPR TO FIND MATCHING NUMBER OF CHARACTERS------------------"

expr "Iceland" : "Ice"
expr $var : $var2

echo "------------------ USING EXPR ON AN INTEGER AND A STRING------------------"

expr 5 = "5"

As shown in the above example, expr can be used to evaluate strings. The interesting thing to note is when expr is used to compare a number and a string. Technically, a numeric 5 should not be equal to string 5. However, the expr returns 1, that is true. This is because expr reads the string, evaluates it and finds out that it is a number. As a result it uses the numeric value of that string to compare.

handling strings with expr

5. Operations on regular expressions

Regular expressions are sequences used to match character combinations in strings. A regex may comprise a sequence of characters, metacharacters and/ or operators. The expr tool works with regular expressions as well.

Example:

#!/bin/bash

expr Poland : '.*'		#count

var="I am on version 3.1"
expr match "$var" '.*\([0-9][.][0-9]\)'

Regular expressions can be used with expr command. You can also store the string in a variable and use it as shown.

The first operation prints the number of characters that matched. The regular expression after the colon is compared with the text. The regular expression '.*' represents any number of any character.
The second operation matches a number (in the format x.y) from the string. This regex requires brackets, otherwise it will print the number of characters matched rather than the match.

regex operations expr

6. Logical operations

We can use the expr command to perform logical operations like OR and AND. The output of the expr command is a boolean, 0 or 1. 1 and 0 are represented as true and false, respectively.

Example:

#!/bin/bash
echo "------------------ LOGICAL OPERATIONS ON NUMBERS------------------"
expr 12  "<"  5  "&"  13  ">" 10
expr 12  "<"  5  "&"  25  -  8  ">" 10

expr 12  "<"  5  "|"  13  ">" 10
expr 12  "<"  5  "|"  25  -  8  ">" 10

echo "------------------ LOGICAL OPERATIONS ON STRINGS AND NUMBERS------------------"
expr length  "messi"  "<"  5  "&"  25  -  8  ">" 10
expr length  "messi"  "<"  5  "|"  25  -  8  ">" 10

echo "------------------ LOGICAL OPERATIONS ON STRINGS------------------"

expr length  "lionel"  "<"  5  "&"  length  "messi"  "<"  5
expr length  "lionel"  "<"  5  "|"  length  "messi" ">"  10

Here, in this example we can see how logical operations can be performed using the expr tool. This command line utility first evaluates the expressions and then does the logical operations. The logical operations can be even carried out between strings, numbers and strings and numbers, too. The outcome of the evaluation is a boolean 0 or 1.

logical operations using expr

Conclusion

Takeaway points we learned:

  • Bash treats variables as strings so to process them as integers, bash provides a simple command called expr.
  • expr command evaluates the expression and prints the output on the screen.
  • expr can be applied to variables, strings and regular expressions.
  • The result of the expr command can be stored in a variable.

About The Author

Aditya Harsh

Aditya H

Aditya Harsh graduated from BITS Pilani, India with a Bachelor’s in Computer Science in 2015. Since then he has been working as a Software Developer and specializes in automation, especially in Java, and Bash scripting. Over these years, he has worked on a lot of cutting-edge technologies and enjoys using his skills to contribute to technological advances. He believes in the power of knowledge and takes great joy in sharing what he has learned.

SHARE

Comments

Please add comments below to provide the author your ideas, appreciation and feedback.

Leave a Reply

Leave a Comment