How to use the command 'test' (with examples)
The test
command is used to perform various tests and evaluations in shell scripts. It allows you to check file types, compare values, and evaluate conditions. By returning 0 if the condition evaluates to true and 1 if it evaluates to false, the test
command is useful in conditional statements and can help in decision-making within scripts.
Use case 1: Test if a given variable is equal to a given string
Code:
test "$MY_VAR" = "/bin/zsh"
Motivation:
In a script, you may want to determine if a variable matches a specific string value. By using the test
command with the equality operator (=
), you can easily perform this comparison.
Explanation:
test
: The command to perform the test.$MY_VAR
: The variable you want to compare.=
: The equality operator, used to compare the variable value."/bin/zsh"
: The string value you want to compare against.
Example output:
If the value of $MY_VAR
is "/bin/zsh"
, the test will evaluate to true, and the command will return 0. Otherwise, if the values do not match, the test will evaluate to false, and the command will return 1.
Use case 2: Test if a given variable is empty
Code:
test -z "$GIT_BRANCH"
Motivation:
In scripting, it may be necessary to check if a variable is empty to handle different scenarios accordingly. The test
command’s -z
option allows you to test if a variable is empty.
Explanation:
test
: The command to perform the test.-z
: The option to check if the following variable is empty.$GIT_BRANCH
: The variable you want to check if it is empty.
Example output:
If the value of $GIT_BRANCH
is empty, the test will evaluate to true, and the command will return 0. If the variable has any content, the test will evaluate to false, and the command will return 1.
Use case 3: Test if a file exists
Code:
test -f "path/to/file_or_directory"
Motivation:
In scripts, it is often necessary to check if a file exists before performing operations on it. The test
command’s -f
option is useful for this purpose.
Explanation:
test
: The command to perform the test.-f
: The option to check if the following path is a regular file."path/to/file_or_directory"
: The path to the file or directory you want to check if it exists.
Example output: If the file or directory specified by the path exists, the test will evaluate to true, and the command will return 0. If the file or directory does not exist, the test will evaluate to false, and the command will return 1.
Use case 4: Test if a directory does not exist
Code:
test ! -d "path/to/directory"
Motivation:
In scripting, you may need to determine if a directory does not exist to handle specific situations. The test
command’s -d
option allows you to verify if a given path is a directory and the !
symbol negates the outcome.
Explanation:
test
: The command to perform the test.!
: The logical negation symbol, used to reverse the outcome of the test.-d
: The option to check if the following path is a directory."path/to/directory"
: The path to the directory you want to check if it does not exist.
Example output: If the directory specified by the path does not exist, the test will evaluate to true (due to the negation), and the command will return 0. If the directory exists, the test will evaluate to false (because of the negation), and the command will return 1.
Use case 5: If A is true, then do B, or C in the case of an error (notice that C may run even if A fails)
Code:
test condition && echo "true" || echo "false"
Motivation:
In scripting, you may want to perform different actions based on the outcome of a test. The test
command, when combined with &&
and ||
, allows you to execute different commands based on the outcome of the test.
Explanation:
test
: The command to perform the test.condition
: The condition you want to evaluate with the test.&&
: The logical AND operator, which executes the following command if the previous one returns true.||
: The logical OR operator, which executes the following command if the previous one returns false.echo "true"
: The command to execute if the test evaluates to true.echo "false"
: The command to execute if the test evaluates to false.
Example output:
If the condition is true, the test will evaluate to true, the first command after &&
will execute, and the output will be “true”. If the condition is false, the test will evaluate to false, the first command after ||
will execute, and the output will be “false”.
Conclusion:
The test
command is a versatile tool for performing tests and comparisons within shell scripts. It allows you to check variables, files, and directories, and make decisions based on the outcomes. By familiarizing yourself with the various options and operators available in the test
command, you can enhance the functionality and control of your scripts.