Bash loops: Difference between revisions
From wikinotes
No edit summary |
|||
(One intermediate revision by the same user not shown) | |||
Line 1: | Line 1: | ||
= | = 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 67: | Line 77: | ||
done | done | ||
</source> | </source> | ||
<syntaxhighlight lang="bash"> | |||
while true; do | |||
echo "hi" | |||
done | |||
</syntaxhighlight> | |||
</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 89: | 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 98: | 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 dfor index in array
list=(a b c d) for i in "${!list[@]}"; do echo "$i == ${list[$i]}" donefor i in expr
for (( i=0; $i < 4; i++ )); do echo -n "$i" done #> 0 1 2 3for num in range
for i in $(seq 0 3); do echo -n "$i " done #> 0 1 2 3iterate 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]} donewhile loop
while [ $x -le 5 ]; do echo $x x=$(( $x + 1 )) donewhile true; do echo "hi" donewhile read loop
This is useful for iterating over items with spaces.
find . | while read f; do echo "--$f"; doneuntil loop
until [ "$var1" == "2" ] ; do echo 'repeat until $var1 == 2' doneread loop (iterate lines)
Iterate over lines (may contain spaces)
find . | while read -r var; do echo "$var" done