Added loops

This commit is contained in:
Dylan Araps
2018-06-15 16:31:06 +10:00
parent 6d77c0c7ac
commit 1c19fab15c

View File

@@ -60,13 +60,16 @@ scripts and not full blown utilities.
* [Remove duplicate array elements.](#remove-duplicate-array-elements) * [Remove duplicate array elements.](#remove-duplicate-array-elements)
* [Cycle through an array.](#cycle-through-an-array) * [Cycle through an array.](#cycle-through-an-array)
* [Toggle between two values.](#toggle-between-two-values) * [Toggle between two values.](#toggle-between-two-values)
* [Loops](#loops)
* [Loop over a range of numbers.](#loop-over-a-range-of-numbers)
* [Loop over an array.](#loop-over-an-array)
* [Loop over files and directories.](#loop-over-files-and-directories)
* [File handling](#file-handling) * [File handling](#file-handling)
* [Read a file to a string.](#read-a-file-to-a-string) * [Read a file to a string.](#read-a-file-to-a-string)
* [Read a file to an array (*by line*).](#read-a-file-to-an-array-by-line) * [Read a file to an array (*by line*).](#read-a-file-to-an-array-by-line)
* [Get the first N lines of a file.](#get-the-first-n-lines-of-a-file) * [Get the first N lines of a file.](#get-the-first-n-lines-of-a-file)
* [Get the last N lines of a file.](#get-the-last-n-lines-of-a-file) * [Get the last N lines of a file.](#get-the-last-n-lines-of-a-file)
* [Get the number of lines in a file.](#get-the-number-of-lines-in-a-file) * [Get the number of lines in a file.](#get-the-number-of-lines-in-a-file)
* [Iterate over files.](#iterate-over-files)
* [Count files or directories in directory.](#count-files-or-directories-in-directory) * [Count files or directories in directory.](#count-files-or-directories-in-directory)
* [Create an empty file.](#create-an-empty-file) * [Create an empty file.](#create-an-empty-file)
* [File Paths](#file-paths) * [File Paths](#file-paths)
@@ -551,6 +554,68 @@ cycle() {
} }
``` ```
# Loops
## Loop over a range of numbers.
Don't use `seq`.
```shell
# Loop from 0-100 (no variable support).
for i in {0..100}; do
printf '%s\n' "$i"
done
# Loop from 0-VAR.
VAR=50
for ((i=0;i<=VAR;i++)); do
printf '%s\n' "$i"
done
```
## Loop over an array.
```shell
arr=(apples oranges tomatoes)
# Just elements.
for element in "${arr[@]}"; do
printf '%s\n' "$element"
done
# Elements and index.
for i in "${!arr[@]}"; do
printf '%s\n' "${arr[$i]}"
done
```
## Loop over files and directories.
Dont use `ls`.
```shell
# 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
# Iterate recursively.
shopt -s globstar
for file in ~/Pictures/**/*; do
printf '%s\n' "$file"
done
shopt -u globstar
```
# File handling # File handling
@@ -652,34 +717,6 @@ $ lines ~/.bashrc
48 48
``` ```
## Iterate over files.
Dont use `ls`.
```shell
# 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
# Iterate recursively.
shopt -s globstar
for file in ~/Pictures/**/*; do
printf '%s\n' "$file"
done
shopt -u globstar
```
## Count files or directories in directory. ## Count files or directories in directory.
This works by passing the output of the glob as function arguments. We This works by passing the output of the glob as function arguments. We