# Conditionals You've mastered conditional expressions. Now, let's put them to work using `if`, `if-else`, `elif`, and `case` statements to control your script's flow. --- ### If Statements The `if` statement executes commands only if a condition is true. ```bash if [[ some_test ]] then fi ``` Example: Prompt for a name, then check if it's empty. ```bash touch if_example.sh ``` Open `if_example.sh` and add: ```bash #!/usr/bin/env bash read -p "What is your name? " name if [[ -z "${name}" ]]; then # Check if name is empty echo "Please enter your name!" fi ``` Save and exit. Make it executable and run: ```bash chmod +x if_example.sh ./if_example.sh ``` ### If-Else Statements Use `else` to define actions when the `if` condition is false. Create `if_else_example.sh`: ```bash touch if_else_example.sh ``` Open `if_else_example.sh` and add: ```bash #!/usr/bin/env bash read -p "What is your name? " name if [[ -z "${name}" ]]; then echo "Please enter your name!" else echo "Hi there ${name}!" fi ``` Save, make executable, and run. ### Admin/Root Checks Check user roles. For admin verification: Create `admin_check.sh`: ```bash touch admin_check.sh ``` Open `admin_check.sh` and add: ```bash #!/usr/bin/env bash admin="Dev Team Six" read -p "Enter your username: " username if [[ "${username}" == "${admin}" ]]; then echo "You are the admin user!" else echo "You are NOT the admin user!" fi ``` Save, make executable, and run. To prevent a script from running as `root` (`EUID` is 0 for root): Create `root_check.sh`: ```bash touch root_check.sh ``` Open `root_check.sh` and add: ```bash #!/usr/bin/env bash if [[ $EUID -eq 0 ]]; then # Check if current user ID is 0 (root) echo "This script should not be run as root. Exiting." exit 1 # Exit with error code fi echo "Script running as non-root user." ``` Save, make executable, and run (test as root and non-root). Combine conditions for stricter control. This example ensures the user is neither `admin` nor `root`. Create `combined_check.sh`: ```bash touch combined_check.sh ``` Open `combined_check.sh` and add: ```bash #!/usr/bin/env bash admin_user="Dev Team Six" read -p "Enter your username: " username if [[ "${username}" != "${admin_user}" || $EUID -ne 0 ]]; then # OR operator echo "You are not the admin or root user. Proceeding safely." else echo "You are an admin or root user. Exercise caution." fi ``` Save, make executable, and run. ### Elif Statements For multiple, mutually exclusive conditions, use `elif`. Create `elif_example.sh`: ```bash touch elif_example.sh ``` Open `elif_example.sh` and add: ```bash #!/usr/bin/env bash read -p "Enter a number: " num if [[ $num -gt 0 ]]; then echo "The number is positive." elif [[ $num -lt 0 ]]; then echo "The number is negative." else echo "The number is 0." fi ``` Save, make executable, and run. ### Case Statements Simplify complex conditionals with `case` when you have multiple choices. The `case` syntax: ```bash case $variable_to_test in pattern_1) commands_for_pattern_1 ;; pattern_2|pattern_3) # Multiple patterns with | commands_for_pattern_2_or_3 ;; *) # Default case (catch-all) default_commands ;; esac ``` Key points: `case` starts the statement, `in` follows the variable. Patterns end with `)`. Commands are terminated by `;;`. `*` is the default. `esac` closes the statement. Example: Check car brand and factory location. Create `car_brand_case.sh`: ```bash touch car_brand_case.sh ``` Open `car_brand_case.sh` and add: ```bash #!/usr/bin/env bash read -p "Enter the name of your car brand: " car case $car in Tesla) echo "${car}'s factory is in the USA." ;; BMW | Mercedes | Audi | Porsche) echo "${car}'s factory is in Germany." ;; Toyota | Mazda | Mitsubishi | Subaru) echo "${car}'s factory is in Japan." ;; *) echo "${car} is an unknown car brand." ;; esac ``` Save, make executable, and run. --- ### Conclusion Practice these conditional structures. Modify the examples. Mastering flow control is critical for effective scripting.