OS Manuals

if(1)

if - conditionally execute a command

IF(1) fish-shell IF(1)

if - conditionally execute a command

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

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 <#variables-status> variable.

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

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


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

fish-shell developers

September 9, 2026 4.9

fish 4.9.3-r0 · os · ingested 2026-09-30