Bash Scripting Examples: Iteration and Arrays
Last updated:Table of Contents
- Create array
- For element in array, do
- For i in range, do
- For i in sequence, do
- For element in sequence do
- For element in sequence do, one-liner
- For line in file, do
- For file in directory, do
- Split string by delimiter
Create array
some_array[0]="foo"
some_array[1]="bar"
some_array[2]="baz"
For element in array, do
Suppose some_array
is an array like the one in the previous example. This will print the array's contents.
# create array
some_array[0]="foo"
some_array[1]="bar"
some_array[2]="baz"
for i in "${some_array[@]}"; do
echo "$i";
done
# PRINTS
# foo
# bar
# bar
For i in range, do
for i in {1..5}; do
echo "$i";
done
# PRINTS
# 1
# 2
# 3
# 4
# 5
For i in sequence, do
seq <from> <to>
command generates a list of numbers from <from>
to to
:
for NUM in `seq 1 4`; do
./some-command "$NUM";
done
# PRINTS
# 1
# 2
# 3
# 4
For element in sequence do
The elements in the arbitrary list can be of mixed types
For cases when you want to run some commands for every element in an arbitrary list:
Example For each element in the list [1, 3, "foo"]
run echo
:
for i in 1 3 "foo"; do
echo "$i"
done
# PRINTS
# 1
# 3
# foo
For element in sequence do, one-liner
Semicolons (
;
) are now mandatory to separate commands
Same as above, but as a single line so you can run in the terminal:
$ for i in 1 3 "foo"; do echo "$i"; done;
1
3
foo
For line in file, do
while read p; do
echo $p
done < /path/to/some/file
For file in directory, do
as a one-liner:
for f in some/path/*; do echo "$f"; done
for f in some/path/*; do
echo "$f"
done
Split string by delimiter
IFS
is needed even though you are not going to use it.
The string gets split into the tokens
array variable.
IFS=':' read -a tokens <<< "foo:bar:baz"
echo ${tokens[0]}
#prints "foo"
some_var=${tokens[2]}
echo $some_var
#prints "baz"