====== The if-clause ====== ===== Synopsis ===== if ; then fi if ; then else fi if ; then elif ; then else fi ===== Description ===== The ''if''-clause can control the script's flow (what's executed) by looking at the exit codes of other commands. All commandsets '''' are interpreted as [[syntax:basicgrammar#lists | command lists]], thus they can contain the whole palette from [[syntax:basicgrammar#simple_commands | simple commands]] over [[syntax:basicgrammar#pipelines | pipelines]] to [[syntax:basicgrammar#compound_commands | compound commands]] (and their combination) as condition. ==== Operation ==== The **''if ''** commands are executed. If the exit code was 0 (TRUE) then the **''then ''** commands are executed, otherwise the **''elif ''** commands and their **''then ''** statements are executed in turn, if all down to the last one fails, the **''else ''** commands are executed, if one of the ''elif'' succeeds, its ''then'' thread is executed, and the ''if''-clause finishes. Basically, the ''elif'' clauses are just additional conditions to test (like a chain of conditions) if the very first condition failed. If one of the conditions fails, the ''else'' commands are executed, otherwise the commands of the condition that succeeded. ===== Examples ===== **Check if a specific user exists in /etc/passwd :-)** if grep ^myuser: /etc/passwd >/dev/null 2>&1; then echo "Yes, it seems I'm real" else echo "Uh - am I a ghost?" fi **Mount with check** if ! mount /mnt/backup >/dev/null 2>&1; then echo "FATAL: backup mount failed" >&2 exit 1 fi **Multiple commands as condition** It's perfectly valid to do: if echo "I'm testing!"; [ -e /some/file ]; then ... fi The exit code that dictates the condition's value is the exit code of the very last command executed in the condition-list (here: The ''[ -e /some/file ]'') **A complete pipe as condition** A complete pipe can also be used as condition. It's very similar to the example above (multiple commands): if echo "Hello world!" | grep -i hello >/dev/null 2>&1; then echo "You just said 'hello', yeah?" fi ===== Portability considerations ===== ===== See also ===== * Internal: [[commands:classictest | the classic test command]]