declaración de bucle:
Hay principalmente tres métodos de bucle proporcionados en Bash Shell: for, while y until.
1.
For loop El método operativo de for loop es sacar el significado de los elementos seriales, ponerlos en las variables especificadas en orden y luego ejecutar repetidamente el área de comando adjunta (entre do y done) hasta que se agoten todos los elementos. .
Entre ellos, serial es una combinación de algunas cadenas, separadas entre sí por el separador definido por $ IFS (como un carácter de espacio), y estas cadenas se denominan campos.
La estructura gramatical de for es la siguiente:
for 变量 in 串行
do
执行命令
done
Descripción:
Línea 1, coloque iterativamente los campos de la serie en variables
Líneas 2-4, y luego repita el área de comando entre do y done hasta que se haya procesado cada campo en la serie.
Ejemplo de diagrama de flujo 1:
Use un bucle for para crear aaa1-aaa10 en el directorio de inicio y luego cree un directorio bbb1-bbb10 en aaa1-aaa10
#!/bin/bash
for a in {
1..10}
do
mkdir /datas/aaa$a
cd /datas/aaa$a
for b in {
1..10}
do
mkdir bbb$b
done
done
#!/bin/bash
for k in $( seq 1 10 )
do
mkdir /home/kuangl/aaa${k}
cd /home/kuangl/aaa${k}
for l in $( seq 1 10 )
do
mkdir bbb${l}
cd /home/kuangl/aaa${k}
done
cd ..
done
Descripción:
La línea 2, seq se usa para generar todos los enteros de un cierto número a otro.
Línea 4, cree una carpeta en el directorio de inicio.
Línea 6, usando un bucle for para crear una carpeta
Ejemplo 2
Enumere el espacio en disco ocupado por cada subdirectorio en el directorio var.
#!/bin/bash
DIR="/var"
cd $DIR
for k in $(ls $DIR)
do
[ -d $k ] && du -sh $k
done
Descripción:
Línea 4, para cada archivo en el directorio / var, para procesamiento de bucle.
Línea 6, si el archivo bajo / var es un directorio, use du -sh para calcular la cantidad de espacio en disco ocupado por el directorio.
En segundo lugar, la
sintaxis del bucle while del bucle while:
1 while 条件测试
2 do
3 执行命令
4 done
Descripción:
Línea 1, la prueba de condición se realiza primero, si el valor de retorno es 0 (la prueba de condición es verdadera), luego ingrese al ciclo y ejecute el área de comando, de lo contrario
No ingrese al bucle, introduzca el comando while
Línea 3, ejecute el área de comandos. Entre estos comandos, debe haber comandos para cambiar la prueba de condición, de modo que exista la posibilidad de
Finalice el ciclo while después de un número finito de pasos (a menos que desee ejecutar un ciclo infinito).
Línea 4, vuelva a la línea 1, ejecute el comando while
Diagrama de flujo:
Ejemplo 1
Mientras que el bucle, el uso clásico es leer el contenido del archivo con la entrada de dirección, de la siguiente manera:
#!/bin/bash
while read a
do
echo $a
done < /datas/6files
1 #!/bin/bash
2 while read kuangl
3 do
4 echo ${kuangl}
5 done < /home/kuangl/scripts/testfile
Descripción:
Línea 2, use read para tener una entrada estándar para leer los datos, póngalo en la variable kuangl, si los datos leídos no están vacíos, ingrese el ciclo.
Línea 4, muestra los datos de línea modificados
Línea 5, el contenido de / home / kuangl / scripts / testfile se transferirá a la entrada para ser leído por read.
Ejemplo 2
#!/bin/bash
declare -i i=1
declare -i sum=0
while ((i<=10))
do
let sum+=i
let i++
done
echo $sum
#!/bin/bash
declare -i i=1
declare -i sum=0
while ((i<=10))
do
let sum+=i
let ++i
done
echo $sum
Descripción:
Línea 2-3, declara que iy sum son números enteros
Línea 4, si la condición prueba: siempre que el valor de i sea menor o igual a 10, ejecute el ciclo.
Línea 6, suma + = i y suma = suma + i son iguales, suma acumula i.
En la línea 7, el valor de i se incrementa en 1. Esta línea es un comando para cambiar la prueba de condición Una vez que i es mayor que 10, el ciclo se puede terminar.
Línea 8, encuentro hecho, vuelva a la línea 6 para realizar la prueba condicional
La línea 9 muestra que el valor de la suma es 55
Ejemplo 3 tabla de multiplicar de while99
#!/bin/bash
a=1
b=1
while ((a <=9))
do
while ((b<=a))
do
let "c=a*b" #声明变量c
echo -n "$a*$b=$c "
let b++
done
let a++
let b=1 #因为每个乘法表都是1开始乘,所以b要重置
echo "" #显示到屏幕换行
done
Descripción:
Línea 8, declare la variable c
Línea 9, formato de visualización de salida de eco, -n no envuelve la salida
Línea 13, sea b = 1 porque todas las tablas de multiplicar comienzan con 1, por lo que es necesario restablecer b
3. Bucle hasta
La prueba de condición del bucle while es medir el valor verdadero, y el bucle hasta es medir el valor falso.
La sintaxis del bucle hasta:
1 until 条件测试
2 do
3 执行命令
4 done
Explicación:
Línea 1, si el resultado de la prueba condicional es falso (el valor de retorno no es 0), ingrese el ciclo.
Línea 3, ejecuta el área de comando. Entre estos comandos, debe haber un comando para cambiar la prueba condicional, de modo que tenga la oportunidad de finalizar la ejecución del ciclo hasta después de un número limitado de pasos (a menos que desee ejecutar un ciclo infinito).
Línea 4, vuelva a la línea 1, ejecute el comando hasta.
Diagrama de flujo:
Ejemplo 1
1 #!/bin/bash
2 declare -i i=10
3 declare -i sum=0
4 until ((i>10))
5 do
6 let sum+=i
7 let ++i
8 done
9 echo $sum
Explicación:
Línea 2-3, declare que iy sum son números enteros
Línea 4, si la prueba de condición: siempre que el valor de i no exceda 10, ingrese el ciclo.
Línea 6, suma + = i y suma = suma + i son iguales, suma acumula i.
En la línea 7, el valor de i se incrementa en 1. Esta línea es un comando para cambiar la prueba de condición Una vez que i es mayor que 10, el ciclo se puede terminar.
Línea 8, encuentro hecho, vuelva a la línea 6 para realizar la prueba condicional
La línea 9 muestra que el valor de la suma es 10
Ejemplo 2 hasta la tabla de multiplicar del 99
#!/bin/bash
a=1
b=1
until ((a>9)) #until 和while相反,条件假的执行,条件真就done结束
do
until ((b>a))
do
let "c=a*b"
echo -n "$a*$b=$c "
let b++
done
let a++
let b=1
echo ""
done
Descripción:
Línea 4, si la prueba de condición: siempre que el valor de a no exceda 9, ingrese al bucle, una vez que exceda 9, no se ejecutará, las condiciones hasta y mientras son opuestas, la condición es verdadera y termina.
Línea 6, b> a, una vez que b sea mayor que a, no se ejecutará