# if - conditionally execute a command

## Synopsis

    if CONDITION; COMMANDS_TRUE ...;
    [else if CONDITION2; COMMANDS_TRUE2 ...;]
    [else; COMMANDS_FALSE ...;]
    end

## Description

`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 else is given, `COMMANDS_FALSE` will be executed.

You can use not, and or or in the condition. See the second example below.

The exit status of the last foreground command to exit can always be accessed using the $status variable.

The -h or --help option displays help about using this command.

## Example

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`.

    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

The following code will print “foo.txt exists and is readable” if foo.txt is a regular file and readable

    if test -f foo.txt
       and test -r foo.txt
       echo "foo.txt exists and is readable"
    end

## See also

`if` is only as useful as the command used as the condition.

Fish ships a few:

- test - perform tests on files and text can compare numbers, strings and check paths

- string - manipulate strings can perform string operations including wildcard and regular expression matches

- path - manipulate and check paths can check paths for permissions, existence or type

- contains - test if a word is present in a list can check if an element is in a list