All checks were successful
		
		
	
	learn org at code.softwareshinobi.com/linux.softwareshinobi.com/pipeline/head This commit looks good
				
			
		
			
				
	
	
		
			111 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			111 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # Conditional Expressions
 | |
| 
 | |
| Conditionals are how your scripts make decisions: run different code based on a true/false outcome.
 | |
| 
 | |
| In Bash, `[[` is your go-to for testing files, strings, and numbers.
 | |
| 
 | |
| Let's start with a basic example:
 | |
| 
 | |
| ```bash
 | |
| touch conditional_test.sh
 | |
| ```
 | |
| 
 | |
| Open `conditional_test.sh` and add:
 | |
| 
 | |
| ```bash
 | |
| #!/usr/bin/env bash
 | |
| 
 | |
| my_var="data"
 | |
| 
 | |
| if [[ -n "$my_var" ]]; then # If variable is not empty
 | |
|   echo "Variable contains data."
 | |
| fi
 | |
| ```
 | |
| 
 | |
| Save, make executable, and run:
 | |
| 
 | |
| ```bash
 | |
| chmod +x conditional_test.sh
 | |
| ./conditional_test.sh
 | |
| ```
 | |
| 
 | |
| Output: `Variable contains data.`
 | |
| 
 | |
| Now, for your full reference:
 | |
| 
 | |
| ## File Tests
 | |
| 
 | |
| These check file attributes. Use `"${file}"` to handle spaces in names.
 | |
| 
 | |
| * `[[ -e "${file}" ]]` - True if `file` exists.
 | |
| * `[[ -f "${file}" ]]` - True if `file` exists and is a regular file.
 | |
| * `[[ -d "${file}" ]]` - True if `file` exists and is a directory.
 | |
| * `[[ -s "${file}" ]]` - True if `file` exists and is not empty (size > 0).
 | |
| * `[[ -r "${file}" ]]` - True if `file` exists and is readable.
 | |
| * `[[ -w "${file}" ]]` - True if `file` exists and is writable.
 | |
| * `[[ -x "${file}" ]]` - True if `file` exists and is executable.
 | |
| * `[[ -L "${file}" ]]` - True if `file` is a symbolic link (`-h` is also used).
 | |
| * `[[ -b "${file}" ]]` - True if `file` exists and is a block device.
 | |
| * `[[ -c "${file}" ]]` - True if `file` exists and is a character device.
 | |
| 
 | |
| ## String Tests
 | |
| 
 | |
| Compare string properties and values.
 | |
| 
 | |
| * `[[ -v "${varname}" ]]` - True if `varname` is set (has a value).
 | |
| * `[[ -z "${string}" ]]` - True if `string` has zero length (empty).
 | |
| * `[[ -n "${string}" ]]` - True if `string` has non-zero length (not empty).
 | |
| * `[[ "${string1}" == "${string2}" ]]` - True if strings are equal. (`==` allows pattern matching inside `[[`.)
 | |
| * `[[ "${string1}" != "${string2}" ]]` - True if strings are not equal.
 | |
| * `[[ "${string1}" < "${string2}" ]]` - True if `string1` sorts before `string2` lexicographically.
 | |
| * `[[ "${string1}" > "${string2}" ]]` - True if `string1` sorts after `string2` lexicographically.
 | |
| 
 | |
| ## Numeric Comparisons
 | |
| 
 | |
| Compare integer values.
 | |
| 
 | |
| * `[[ ${arg1} -eq ${arg2} ]]` - True if `arg1` equals `arg2`.
 | |
| * `[[ ${arg1} -ne ${arg2} ]]` - True if `arg1` not equals `arg2`.
 | |
| * `[[ ${arg1} -lt ${arg2} ]]` - True if `arg1` less than `arg2`.
 | |
| * `[[ ${arg1} -le ${arg2} ]]` - True if `arg1` less than or equal to `arg2`.
 | |
| * `[[ ${arg1} -gt ${arg2} ]]` - True if `arg1` greater than `arg2`.
 | |
| * `[[ ${arg1} -ge ${arg2} ]]` - True if `arg1` greater than or equal to `arg2`.
 | |
| 
 | |
| ## Logical Operators
 | |
| 
 | |
| Combine multiple conditions.
 | |
| 
 | |
| * **AND (`&&`)**: Both conditions must be true.
 | |
|     ```bash
 | |
|     # Example: file exists AND is not empty
 | |
|     if [[ -f "my_file.txt" && -s "my_file.txt" ]]; then
 | |
|         echo "File is present and has content."
 | |
|     fi
 | |
|     ```
 | |
| * **OR (`||`)**: At least one condition must be true.
 | |
|     ```bash
 | |
|     # Example: either file or directory exists
 | |
|     if [[ -f "another_file.txt" || -d "another_dir" ]]; then
 | |
|         echo "Found a file or a directory."
 | |
|     fi
 | |
|     ```
 | |
| 
 | |
| ## Exit Status Checks
 | |
| 
 | |
| `$?:` The exit status of the *last* executed command. `0` means success. Any non-zero value indicates an error.
 | |
| 
 | |
| * **Success:**
 | |
|     ```bash
 | |
|     command_to_run
 | |
|     if [[ $? -eq 0 ]]; then
 | |
|       echo "Command succeeded."
 | |
|     fi
 | |
|     ```
 | |
| * **Failure:**
 | |
|     ```bash
 | |
|     command_to_run
 | |
|     if [[ $? -ne 0 ]]; then
 | |
|       echo "Command failed."
 | |
|     fi
 | |
|     ```
 |