Bash loops: Difference between revisions

From wikinotes
No edit summary
 
Line 1: Line 1:
= for loop =
= Loop Control =
<blockquote>
<blockquote>
== for item in array ==
<syntaxhighlight lang="bash">
continue  # skip to next iteration
break    # stop looping
</syntaxhighlight>
</blockquote><!-- Loop Control -->
 
= Loop Types =
<blockquote>
== for loop ==
<blockquote>
=== for item in array ===
<blockquote>
<blockquote>
<source lang="bash">
<source lang="bash">
Line 13: Line 23:
</blockquote><!-- for in -->
</blockquote><!-- for in -->


== for index in array ==
=== for index in array ===
<blockquote>
<blockquote>
<source lang="bash">
<source lang="bash">
list=(a b c d)
list=(a b c d)
for i in "${!list[@]}"; do  
for i in "${!list[@]}"; do
   echo "$i == ${list[$i]}"
   echo "$i == ${list[$i]}"
done
done
Line 23: Line 33:
</blockquote><!-- for index in array -->
</blockquote><!-- for index in array -->


== for i in expr ==
=== for i in expr ===
<blockquote>
<blockquote>
<source lang="bash">
<source lang="bash">
Line 34: Line 44:
</blockquote><!-- for i in expr -->
</blockquote><!-- for i in expr -->


== for num in range ==
=== for num in range ===
<blockquote>
<blockquote>
<source lang="bash">
<source lang="bash">
Line 44: Line 54:
</blockquote><!-- for num in range -->
</blockquote><!-- for num in range -->


== iterate array by two ==
=== iterate array by two ===
<blockquote>
<blockquote>
<source lang="bash">
<source lang="bash">
Line 59: Line 69:
</blockquote><!-- for loop -->
</blockquote><!-- for loop -->


= while loop =
== while loop ==
<blockquote>
<blockquote>
<source lang="bash">
<source lang="bash">
Line 75: Line 85:
</blockquote><!-- while loop -->
</blockquote><!-- while loop -->


= while read loop =
== while read loop ==
<blockquote>
<blockquote>
This is useful for iterating over items with spaces.
This is useful for iterating over items with spaces.


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
find . | while read f; do  
find . | while read f; do
     echo "--$f";  
     echo "--$f";
done
done
</syntaxhighlight>
</syntaxhighlight>
</blockquote><!-- read loop -->
</blockquote><!-- read loop -->


= until loop =
== until loop ==
<blockquote>
<blockquote>
<source lang="bash">
<source lang="bash">
Line 95: Line 105:
</blockquote><!-- until loop -->
</blockquote><!-- until loop -->


= read loop (iterate lines) =
== read loop (iterate lines) ==
<blockquote>
<blockquote>
Iterate over lines (may contain spaces)
Iterate over lines (may contain spaces)
Line 104: Line 114:
</syntaxhighlight>
</syntaxhighlight>
</blockquote><!-- read loop -->
</blockquote><!-- read loop -->
</blockquote><!-- Loop Types -->

Latest revision as of 22:52, 29 October 2022

Loop Control

continue  # skip to next iteration
break     # stop looping

Loop Types

for loop

for item in array

list=(a b c d)

for ch in ${list[@]};do
    echo -n $ch
done
#> a b c d

for index in array

list=(a b c d)
for i in "${!list[@]}"; do
  echo "$i == ${list[$i]}"
done

for i in expr

for (( i=0; $i < 4; i++ )); do
   echo -n "$i"
done
#> 0 1 2 3

for num in range

for i in $(seq 0 3); do
    echo -n "$i "
done
#> 0 1 2 3

iterate array by two

gitcmd=(
	"bash"   "/home/will/progs/bash"
	"config" "/home/will/progs/config"
)

for (( i=0; $i < ${#gitcmd[@]}; i=(( $i+2 )) )); do
	echo ${gitcmd[$i]}
done

while loop

while [ $x -le 5 ]; do
    echo $x
    x=$(( $x + 1 ))
done
while true; do
  echo "hi"
done

while read loop

This is useful for iterating over items with spaces.

find . | while read f; do
    echo "--$f";
done

until loop

until [ "$var1" == "2" ] ; do
   echo 'repeat until $var1 == 2'
done

read loop (iterate lines)

Iterate over lines (may contain spaces)

find . | while read -r var; do
  echo "$var"
done