bash - que - script para crear carpetas linux
shell bash anidado para bucle (3)
Quiero escribir un bucle anidado para que funcione en el indicador de shell bash. anidado para bucle en el comando de una sola línea.
Por ejemplo,
for i in a b; do echo $i; done
a
b
En el ejemplo anterior, for loop se ejecuta en un solo comando de línea. Así he intentado el bucle anidado en el indicador de shell. No funciona. Como hacer esto. Por favor actualizeme en esto.
Esto no es un bucle anidado, solo un bucle simple. Y la versión anidada también funciona:
# for i in a b; do for j in a b; do echo $j; done; done
a
b
a
b
Una línea (semiconos necesarios):
for i in 0 1 2 3 4 5 6 7 8 9; do for j in 0 1 2 3 4 5 6 7 8 9; do echo "$i$j"; done; done
Formato para legibilidad (no se necesitan puntos y coma):
for i in 0 1 2 3 4 5 6 7 8 9
do
for j in 0 1 2 3 4 5 6 7 8 9
do
echo "$i$j"
done
done
Hay diferentes vistas sobre cómo se debe distribuir el código de shell en varias líneas; eso es lo que normalmente uso, a menos que coloque la siguiente operación en la misma línea que do
(guardando dos líneas aquí).
#!/bin/bash
# loop*figures.bash
for i in 1 2 3 4 5 # First loop.
do
for j in $(seq 1 $i)
do
echo -n "*"
done
echo
done
echo
# outputs
# *
# **
# ***
# ****
# *****
for i in 5 4 3 2 1 # First loop.
do
for j in $(seq -$i -1)
do
echo -n "*"
done
echo
done
# outputs
# *****
# ****
# ***
# **
# *
for i in 1 2 3 4 5 # First loop.
do
for k in $(seq -5 -$i)
do
echo -n '' ''
done
for j in $(seq 1 $i)
do
echo -n "* "
done
echo
done
echo
# outputs
# *
# * *
# * * *
# * * * *
# * * * * *
for i in 1 2 3 4 5 # First loop.
do
for j in $(seq -5 -$i)
do
echo -n "* "
done
echo
for k in $(seq 1 $i)
do
echo -n '' ''
done
done
echo
# outputs
# * * * * *
# * * * *
# * * *
# * *
# *
exit 0