Bash, the powerful scripting language for Linux and Unix systems, offers a versatile tool for checking conditions: the test
command (and its convenient alternatives). Let’s explore how test
empowers your scripts to make informed decisions and handle errors gracefully.
What is the Test Command?
The test
command (or its equivalent square bracket syntax []
) evaluates expressions and returns a status code:
0
(true) if the expression is true.1
(false) if the expression is false.
This simple mechanism opens a world of possibilities for building robust scripts.
Syntax
There are three common ways to use the test command:
# Using the 'test' keyword
test expression
# Using square brackets (preferred for readability)
[ expression ]
# Using double parentheses (for arithmetic expressions)
(( expression ))
Common Test Operators
- File Tests:
-f file
: True if file exists and is a regular file.-d file
: True if file exists and is a directory.-s file
: True if file exists and has a size greater than zero.-r file
: True if file exists and is readable.-w file
: True if file exists and is writable.-x file
: True if file exists and is executable.
- String Tests:
-z string
: True if string is empty (zero length).-n string
: True if string is not empty.string1 = string2
: True if the strings are equal.string1 != string2
: True if the strings are not equal.
- Numeric Tests:
num1 -eq num2
: True if num1 is equal to num2.num1 -ne num2
: True if num1 is not equal to num2.num1 -lt num2
: True if num1 is less than num2.num1 -gt num2
: True if num1 is greater than num2.num1 -le num2
: True if num1 is less than or equal to num2.num1 -ge num2
: True if num1 is greater than or equal to num2.
- Logical Operators:
! expression
: Logical NOT (negation)expression1 -a expression2
: Logical ANDexpression1 -o expression2
: Logical OR
Examples
Example 1: Checking File Existence and Permissions
file="important_data.txt"
if [ -f "$file" -a -r "$file" ]; then
echo "File exists and is readable!"
else
echo "Either the file doesn't exist or is not readable."
fi
Example 2: Comparing Strings
word1="hello"
word2="world"
if [ "$word1" != "$word2" ]; then
echo "The words are different."
else
echo "The words are the same."
fi
Output:
The words are different.
Example 3: Arithmetic Comparison
count=15
if (( count > 10 )); then
echo "Count is greater than 10"
fi
Output:
Count is greater than 10
Why Use Test in Your Scripts?
- Error Handling: Validate input, check file conditions, and anticipate potential issues before they cause problems.
- Decision Making: Build smarter scripts that adapt based on different circumstances.
- Improved Readability: The square bracket syntax is often clearer than a series of nested
if
statements.