2023-02-21 07:34:13 +00:00
|
|
|
---
|
|
|
|
tags:
|
|
|
|
- shell
|
|
|
|
---
|
|
|
|
|
|
|
|
# Conditionals in Bash
|
|
|
|
|
|
|
|
## If statements
|
|
|
|
|
2024-02-02 15:58:13 +00:00
|
|
|
- Conditional blocks start with `if` and end with the inversion `fi` (this is a
|
|
|
|
common syntactic pattern in bash)
|
|
|
|
- The conditional expression must be placed in square brackets with spaces
|
|
|
|
either side. The spaces matter: if you omit them, the code will not run
|
2023-02-21 07:34:13 +00:00
|
|
|
- We designate the code to run when the conditional is met with `then`
|
|
|
|
- We can incorporate else if logic with `elif`
|
|
|
|
|
|
|
|
## Basic example
|
|
|
|
|
|
|
|
```bash
|
|
|
|
if [ -e $var ]; then
|
|
|
|
# Do something
|
|
|
|
else
|
|
|
|
# Do something else
|
|
|
|
fi
|
|
|
|
```
|
|
|
|
|
|
|
|
## If, else
|
|
|
|
|
|
|
|
```bash
|
|
|
|
if [ "$myMove" -eq "$opponentMove" ]; then
|
|
|
|
(( totalScore+=myMove+3 ))
|
|
|
|
elif [ $absDiff -eq 2 ] && [ "$myMove" -gt "$opponentMove" ]; then
|
|
|
|
(( totalScore+=myMove))
|
|
|
|
elif [ $absDiff -eq 2 ] && [ "$opponentMove" -gt "$myMove" ]; then
|
|
|
|
(( totalScore+=myMove+6))
|
|
|
|
elif [ $absDiff -eq 1 ] && [ "$opponentMove" -gt "$myMove" ]; then
|
|
|
|
(( totalScore+=myMove))
|
|
|
|
elif [ $absDiff -eq 1 ] && [ "$myMove" -gt "$opponentMove" ]; then
|
|
|
|
(( totalScore+=myMove+6))
|
|
|
|
fi
|
|
|
|
```
|
|
|
|
|
|
|
|
## Nested conditionals
|
|
|
|
|
|
|
|
```bash
|
|
|
|
if [[ "$line" =~ ^$ ]]; then
|
|
|
|
if [[ "$runningTotal" -gt "$highest" ]]; then
|
|
|
|
(( highest=runningTotal ))
|
|
|
|
fi
|
|
|
|
# Reset running sum
|
|
|
|
(( runningTotal=0 ))
|
|
|
|
fi
|
|
|
|
```
|