# if

## if

The `if` statement in Unix-like operating systems is a fundamental control structure used in shell scripting to perform conditional execution of commands. It allows you to execute a set of commands only if a specified condition is true, and optionally execute another set of commands if the condition is false.

#### Basic Syntax

```bash
if condition
then
  commands
fi
```

* **condition:** A command or test expression that returns a true (0) or false (non-zero) exit status.
* **commands:** The commands to execute if the condition is true.

#### Extended Syntax

You can extend the `if` statement with `else` and `elif` (else if) clauses to handle multiple conditions:

```bash
if condition1
then
  commands1
elif condition2
then
  commands2
else
  commands3
fi
```

* **condition1:** The primary condition to test.
* **commands1:** Commands to execute if condition1 is true.
* **condition2:** The secondary condition to test if condition1 is false.
* **commands2:** Commands to execute if condition2 is true.
* **commands3:** Commands to execute if neither condition1 nor condition2 is true.

#### Examples

**Basic `if` Statement**

```bash
if [ $USER == "root" ]
then
  echo "You are the root user."
fi
```

**`if-else` Statement**

```bash
if [ $USER == "root" ]
then
  echo "You are the root user."
else
  echo "You are not the root user."
fi
```

**`if-elif-else` Statement**

```bash
if [ $USER == "root" ]
then
  echo "You are the root user."
elif [ $USER == "admin" ]
then
  echo "You are the admin user."
else
  echo "You are a regular user."
fi
```

#### Practical Use Cases

**Checking File Existence**

```bash
file="/path/to/file"
if [ -f $file ]
then
  echo "$file exists."
else
  echo "$file does not exist."
fi
```

**Checking Directory Existence**

```bash
directory="/path/to/directory"
if [ -d $directory ]
then
  echo "$directory exists."
else
  echo "$directory does not exist."
fi
```

**Comparing Numbers**

```bash
num1=10
num2=20
if [ $num1 -lt $num2 ]
then
  echo "$num1 is less than $num2."
else
  echo "$num1 is not less than $num2."
fi
```

**Checking Command Exit Status**

```bash
ping -c 1 example.com > /dev/null 2>&1
if [ $? -eq 0 ]
then
  echo "example.com is reachable."
else
  echo "example.com is not reachable."
fi
```

#### Advanced Examples

**Nested `if` Statements**

```bash
if [ $USER == "root" ]
then
  if [ -f "/etc/passwd" ]
  then
    echo "Root user and /etc/passwd exists."
  else
    echo "Root user but /etc/passwd does not exist."
  fi
else
  echo "You are not the root user."
fi
```

**Combining Conditions with `&&` and `||`**

```bash
if [ $USER == "root" ] && [ -f "/etc/passwd" ]
then
  echo "Root user and /etc/passwd exists."
else
  echo "Either not root user or /etc/passwd does not exist."
fi
```

#### Using `test` Command

The `test` command (or its alias `[ ... ]`) is used to evaluate expressions:

```bash
if test $USER = "root"
then
  echo "You are the root user."
fi
```

#### Conclusion

The `if` statement is a crucial tool in shell scripting, enabling conditional execution of commands based on the evaluation of expressions. By using `if`, `else`, and `elif` clauses, you can create scripts that respond dynamically to different conditions and states.

## help

```
-n: This option tests if a variable is not empty.
-z: This option tests if a variable is empty.
-e: This option tests if a file or directory exists.
-f: This option tests if a file is a regular file.
-d: This option tests if a file is a directory.
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://linux-tutorial-cli.gitbook.io/linux-cli-tutorial/txt-files/if.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
