bash for loop — iterate over files, list, range
Quick Answer
# Over a list of values
for name in Alice Bob Charlie; do
echo "Hello, $name"
done
# Over files (glob)
for file in *.txt; do
echo "Processing $file"
done
# Range (brace expansion)
for i in {1..5}; do
echo $i
done
Usage
For loops are the standard way to iterate over lists, files, or ranges in bash.
Other causes & fixes
C-style for loop
for (( i = 0; i < 10; i++ )); do
echo $i
done
Iterate over an array
items=("one" "two" "three")
for item in "${items[@]}"; do
echo "$item"
done
# With index
for i in "${!items[@]}"; do
echo "$i: ${items[$i]}"
done
Iterate over command output (safe)
# Process substitution — handles filenames with spaces
while IFS= read -r file; do
echo "Found: $file"
done < <(find . -name "*.log")
Break and continue
for file in *.txt; do
[[ "$file" == skip-* ]] && continue # skip this iteration
[[ "$file" == stop.txt ]] && break # exit the loop
echo "$file"
done
Related