2019-03-31 11:05:09 +02:00
.. _cmd-if:
2018-12-16 17:39:33 -08:00
if - conditionally execute a command
2019-01-02 20:10:47 -08:00
====================================
2018-12-16 17:39:33 -08:00
2018-12-17 17:58:24 -08:00
Synopsis
--------
2018-12-16 13:08:41 -08:00
2019-09-17 17:59:04 +08:00
::
2018-12-17 17:58:24 -08:00
2019-09-17 17:59:04 +08:00
if CONDITION; COMMANDS_TRUE...;
[else if CONDITION2; COMMANDS_TRUE2...;]
[else; COMMANDS_FALSE...;]
end
2018-12-16 13:08:41 -08:00
2018-12-18 18:44:30 -08:00
Description
2019-01-02 20:10:47 -08:00
-----------
2018-12-16 13:08:41 -08:00
2019-10-09 07:56:49 +02:00
`` if `` will execute the command `` CONDITION `` . If the condition's exit status is 0, the commands `` COMMANDS_TRUE `` will execute. If the exit status is not 0 and :ref: `else <cmd-else>` is given, `` COMMANDS_FALSE `` will be executed.
2018-12-16 13:08:41 -08:00
2019-03-31 11:24:04 +02:00
You can use :ref: `and <cmd-and>` or :ref: `or <cmd-or>` in the condition. See the second example below.
2018-12-16 13:08:41 -08:00
2019-03-31 11:32:40 +02:00
The exit status of the last foreground command to exit can always be accessed using the :ref: `$status <variables-status>` variable.
2018-12-16 13:08:41 -08:00
2018-12-18 18:44:30 -08:00
Example
2019-01-02 20:10:47 -08:00
-------
2018-12-16 13:08:41 -08:00
2018-12-19 12:02:45 -08:00
The following code will print `` foo.txt exists `` if the file foo.txt exists and is a regular file, otherwise it will print `` bar.txt exists `` if the file bar.txt exists and is a regular file, otherwise it will print `` foo.txt and bar.txt do not exist `` .
2018-12-16 13:08:41 -08:00
2018-12-18 19:14:04 -08:00
::
if test -f foo.txt
echo foo.txt exists
else if test -f bar.txt
echo bar.txt exists
else
echo foo.txt and bar.txt do not exist
end
2018-12-16 13:08:41 -08:00
The following code will print "foo.txt exists and is readable" if foo.txt is a regular file and readable
2018-12-18 19:14:04 -08:00
::
if test -f foo.txt
and test -r foo.txt
echo "foo.txt exists and is readable"
end