2018-06-20 08:00:33 +02:00
|
|
|
|
# LOOPS
|
2018-06-20 04:24:38 +02:00
|
|
|
|
|
2018-06-20 05:03:53 +02:00
|
|
|
|
## Loop over a range of numbers
|
2018-06-20 04:24:38 +02:00
|
|
|
|
|
2018-06-20 08:00:33 +02:00
|
|
|
|
Alternative to `seq`.
|
2018-06-20 04:24:38 +02:00
|
|
|
|
|
|
|
|
|
```shell
|
2018-06-20 05:03:53 +02:00
|
|
|
|
# Loop from 0-100 (no variable support).
|
|
|
|
|
for i in {0..100}; do
|
|
|
|
|
printf '%s\n' "$i"
|
|
|
|
|
done
|
2018-06-20 04:24:38 +02:00
|
|
|
|
```
|
|
|
|
|
|
2018-06-20 05:03:53 +02:00
|
|
|
|
## Loop over a variable range of numbers
|
2018-06-20 04:24:38 +02:00
|
|
|
|
|
2018-06-20 08:00:33 +02:00
|
|
|
|
Alternative to `seq`.
|
2018-06-20 04:24:38 +02:00
|
|
|
|
|
|
|
|
|
```shell
|
2018-06-20 05:03:53 +02:00
|
|
|
|
# Loop from 0-VAR.
|
|
|
|
|
VAR=50
|
|
|
|
|
for ((i=0;i<=VAR;i++)); do
|
|
|
|
|
printf '%s\n' "$i"
|
|
|
|
|
done
|
2018-06-20 04:24:38 +02:00
|
|
|
|
```
|
|
|
|
|
|
2018-06-20 05:03:53 +02:00
|
|
|
|
## Loop over an array
|
2018-06-20 04:24:38 +02:00
|
|
|
|
|
|
|
|
|
```shell
|
2018-06-20 05:03:53 +02:00
|
|
|
|
arr=(apples oranges tomatoes)
|
2018-06-20 04:24:38 +02:00
|
|
|
|
|
2018-06-20 05:03:53 +02:00
|
|
|
|
# Just elements.
|
|
|
|
|
for element in "${arr[@]}"; do
|
|
|
|
|
printf '%s\n' "$element"
|
|
|
|
|
done
|
2018-06-20 04:24:38 +02:00
|
|
|
|
```
|
|
|
|
|
|
2018-06-20 05:03:53 +02:00
|
|
|
|
## Loop over an array with an index
|
2018-06-20 04:24:38 +02:00
|
|
|
|
|
|
|
|
|
```shell
|
2018-06-20 05:03:53 +02:00
|
|
|
|
arr=(apples oranges tomatoes)
|
2018-06-20 04:24:38 +02:00
|
|
|
|
|
2018-06-20 05:03:53 +02:00
|
|
|
|
# Elements and index.
|
|
|
|
|
for i in "${!arr[@]}"; do
|
2019-01-19 10:20:13 +01:00
|
|
|
|
printf '%s\n' "${arr[i]}"
|
2018-06-20 05:03:53 +02:00
|
|
|
|
done
|
2018-06-20 04:24:38 +02:00
|
|
|
|
|
2018-06-20 05:03:53 +02:00
|
|
|
|
# Alternative method.
|
|
|
|
|
for ((i=0;i<${#arr[@]};i++)); do
|
2019-01-19 10:20:13 +01:00
|
|
|
|
printf '%s\n' "${arr[i]}"
|
2018-06-20 05:03:53 +02:00
|
|
|
|
done
|
2018-06-20 04:24:38 +02:00
|
|
|
|
```
|
|
|
|
|
|
2018-06-20 05:03:53 +02:00
|
|
|
|
## Loop over the contents of a file
|
2018-06-20 04:24:38 +02:00
|
|
|
|
|
|
|
|
|
```shell
|
2018-06-20 05:03:53 +02:00
|
|
|
|
while read -r line; do
|
|
|
|
|
printf '%s\n' "$line"
|
|
|
|
|
done < "file"
|
2018-06-20 04:24:38 +02:00
|
|
|
|
```
|
|
|
|
|
|
2018-06-20 05:03:53 +02:00
|
|
|
|
## Loop over files and directories
|
2018-06-20 04:24:38 +02:00
|
|
|
|
|
2018-06-20 05:03:53 +02:00
|
|
|
|
Don’t use `ls`.
|
2018-06-20 04:24:38 +02:00
|
|
|
|
|
|
|
|
|
```shell
|
2018-06-20 05:03:53 +02:00
|
|
|
|
# Greedy example.
|
|
|
|
|
for file in *; do
|
|
|
|
|
printf '%s\n' "$file"
|
|
|
|
|
done
|
|
|
|
|
|
|
|
|
|
# PNG files in dir.
|
|
|
|
|
for file in ~/Pictures/*.png; do
|
|
|
|
|
printf '%s\n' "$file"
|
|
|
|
|
done
|
|
|
|
|
|
|
|
|
|
# Iterate over directories.
|
|
|
|
|
for dir in ~/Downloads/*/; do
|
|
|
|
|
printf '%s\n' "$dir"
|
|
|
|
|
done
|
|
|
|
|
|
|
|
|
|
# Brace Expansion.
|
|
|
|
|
for file in /path/to/parentdir/{file1,file2,subdir/file3}; do
|
|
|
|
|
printf '%s\n' "$file"
|
|
|
|
|
done
|
|
|
|
|
|
|
|
|
|
# Iterate recursively.
|
|
|
|
|
shopt -s globstar
|
|
|
|
|
for file in ~/Pictures/**/*; do
|
|
|
|
|
printf '%s\n' "$file"
|
|
|
|
|
done
|
|
|
|
|
shopt -u globstar
|
2018-06-20 04:24:38 +02:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
<!-- CHAPTER END -->
|
|
|
|
|
|