Testing for String Characteristics

Problem

You want your script to check the value of some strings before using them. The strings could be user input, read from a file, or environment variables passed to your script. How do you do that with bash scripts?

Solution

There are some simple tests that you can do with the built-in test command, using the single bracket if statements. You can check to see whether a variable has any text, and you can check to see whether two variables are equal as strings.

Discussion

For example:

#!/usr/bin/env bash
# cookbook filename: checkstr
#
# if statement
# test a string to see if it has any length
#
# use the command line argument
VAR="$1"
#
if [ "$VAR" ]
then
    echo has text
else
    echo zero length
fi
#
if [ -z "$VAR" ]
then
    echo zero length
else
    echo has text
fi

We use the phrase “has any length” deliberately. There are two types of variables that will have no length—those that have been set to an empty string and those that have not been set at all. This test does not distinguish between those two cases. All it asks is whether there are some characters in the variable.

It is important to put quotes around the "$VAR" expression because without them your syntax could be disturbed by odd user input. If the value of $VAR were x -a 7 -lt 5 and if there were no quotes around the $VAR, then the expression:

if [ -z $VAR ]

would become (after variable substitution):

if [ -z x -a 7 -lt 5 ]

which is legitimate syntax for a more elaborate test, but one that will yield a ...

Get bash Cookbook now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.