The [
command, typically known as a “test,” is a command from the GNU Core Utils bundle, and initiates a conditional assertion in Bash. Its operate is precisely the identical because the take a look at
command. When you need to execute a command solely when one thing is both true or false, use the [
or the take a look at
command. However, there is a important distinction between [
or take a look at
and [[
, and there is a technical distinction between these instructions and your shell’s variations of them.
[ vs take a look at instructions in Linux
The [
and the take a look at
instructions, put in by the GNU Core Utils bundle, carry out the identical operate utilizing a barely completely different syntax. (You would possibly discover it tough to seek for documentation utilizing the one left-square bracket character, nonetheless, so many customers discover take a look at
simpler to reference.) Bash and related shells occur to additionally have the [
and the take a look at
instructions built-in, and the built-in variations supersede those put in in /usr/bin
. In different phrases, once you use [
or take a look at
, you are in all probability not executing /usr/bin/[
or /usr/bin/take a look at
. Instead, you are invoking what’s basically a operate of your Bash shell.
You would possibly marvel why [
or take a look at
exist in /usr/bin
in any respect. Some shells, equivalent to tcsh, haven’t got [
and take a look at
built-in, so if you wish to use these instructions in that shell, you need to have them put in as separate binaries.
The backside line is that so long as you do not get an error once you kind a command beginning with [
or take a look at
, you then’ve bought all the pieces you want. It virtually by no means issues whether or not your shell or your bin
listing is offering the instructions.
Testing for a file
It’s frequent to need to know whether or not a file exists, typically so you’ll be able to confidently proceed with some motion, or so you’ll be able to keep away from “clobbering” it with a file of the identical identify. In an interactive shell session, you’ll be able to simply look to see whether or not the file exists however in a shell script, you want the pc to find out that for itself. The -e
choice assessments whether or not a file exists, however its obvious response is similar both approach.
$ contact instance
$ take a look at -e instance
$ take a look at -e notafile
$
The [
and take a look at
instructions are basically switches. They emit a true
or false
response, however considers each of them as success. You can put this to make use of by pairing the instructions with logical operators, equivalent to &&
and ||
. The &&
operator is executed when a response is true
:
$ contact instance
$ take a look at -e instance && echo "foo"
foo
$ take a look at -e notafile && echo "foo"
$
The ||
operator executes when a response is false
:
$ contact instance
$ take a look at -e instance || echo "foo"
$ take a look at -e notafile || echo "foo"
foo
$
If you favor, you should use sq. brackets as an alternative of take a look at
. In all circumstances, the outcomes are the identical:
$ contact instance
$ [ -e instance ] && echo "foo"
foo
$ [ -e notafile ] && echo "foo"
$
Testing for file varieties
Everything in Linux is a file, so when you’ll be able to take a look at for the existence of a listing with the -e
choice, the identical approach you take a look at for a file. However, there are completely different sorts of recordsdata, and typically that issues. You can use [
or take a look at
to detect quite a lot of completely different file varieties:
There are extra, however these are usually the commonest.
Testing for file attributes
You may take a look at metadata of a file:
You can take a look at by possession:
Or you’ll be able to take a look at by permissions (or file mode):
-
-r
: a file with learn permission granted -
-w
: a file with write permission granted -
-x
: a file with execute permission granted -
-k
: a file with the sticky bit set
Combining assessments
You do not all the time simply have to check for a single attribute. The -a
choice (“and”) permits you to string a number of assessments collectively, with the requirement that every one assessments return as true
:
$ contact zombie apocalypse now
$ take a look at -e zombie -a -e apocalypse -a -e now && echo "no thanks"
no thanks
If any expression fails, then the take a look at returns false
:
$ contact zombie apocalypse now
$ take a look at -e plant -a -e apocalypse -a -e now && echo "no thanks"
$
The -o
choice (“or”) requires that one expression is true:
$ contact zombie apocalypse now
$ take a look at -e zombie -o -e plant -o -e apocalypse && echo "no thanks"
no thanks
Integer assessments
You may take a look at integers. That’s not essentially instantly helpful (you in all probability inherently know that 0 is lower than 1, for example) but it surely’s invaluable once you’re utilizing variables in a script.
The operators are pretty intuitive when you perceive the schema:
Here’s a easy instance:
$ nil=0
$ foo=1
$ take a look at $foo -eq $nil || echo "Those are not equal."
Those are usually not equal.
$ take a look at $foo -eq 1 && echo "Those are equal."
Of course, you’ll be able to mix assessments.
$ contact instance
$ take a look at $foo -ne $nil -a -e instance -o -e notafile && echo "yes"
sure
Testing testing
The [
and take a look at
instructions are very important conditional statements when scripting. These are straightforward and customary methods to manage the movement of your code. There are but extra assessments out there than what I’ve coated on this article, so whether or not you used Bash, tcsh, ksh, or another shell solely, check out the person web page to get the total spectrum of what these instructions provide.