bucle de concha
Uno, para bucle
(A) para bucle
El bucle for, también llamado bucle condicional, o for i in, es en realidad la característica del bucle for. El número de veces y las condiciones dadas son proporcionales a la
estructura de la instrucción for.
Se leen y utilizan diferentes valores de variable para ejecutar el mismo conjunto de comandos uno a uno.
for 变量名 in 取值列表
do
命令序列
done
atravesar
for i in {
1..10} 迭代加1 | {
1..10..2} 迭代,每次循环加2
或 $(seq 1 10) | $(seq 1 2 10)
或for ((i=1; i<=10; i++)) | ((i=1; i<=10; i+=2))
do
echo $i
done
#/bin/bash
#1-10
for ((i=1; i<=10; i++)) 或$(seq 1 10)或者for i in {
1..10}
do
echo $i
done
Ejemplo 1 (crear usuarios en lotes)
1. Cree un archivo que contenga el nombre de usuario.
2. Escribe el guión
#/bin/bash
#passwd
a=$(cat name.txt)
for i in a
do
useradd $i
echo "1234" | passwd --stdin $i
或echo -e "1234\n1234\n" | passwd $i // 或这使用\n代表回车键
done
3. Verificación
Ejemplo 2 (prueba de la conectividad del host)
#!/bin/bash
#ping范围主机
for i in 172.16.100.{
1..20}
do
ping -c 3 -i 0.5 -W 2 $i &> /dev/null
if [ $? = 0 ]
then
echo "$i online"
else
echo "$i offline"
fi
done
Hay varias preguntas, por ejemplo, presentadas en el artículo anterior.Enlace
Dos, mientras que bucle
(1) Primero observe el contenido de las preguntas de muestra
Adivina el juego de precios
方法一:不使用break循环
price=$[$RANDOM % 1000]
a=0
times=0
echo "猜猜商品价格是多少"
while [ $a -eq 0 ]
do
let times++
read -p "请输入你猜的价格:" b
if [ $b -eq $price ];then
echo "yes!"
let a++
elif [ $b -gt $price ];then
echo "你猜大了!"
elif [ $b -lt $price ];then
echo "你猜小了!"
fi
done
echo "你总共猜了 $times 次"
方法二:
#!/bin/bash
#猜价格
let a=$RANDOM%1000
b=0
d=0
while yes!
do
read -p "输入价格" c
if [ $c = $a ]
then
echo "yes"
break
elif [ $c -lt $a ]
then
echo "太低了"
else
echo "太高了"
fi
let d++
done
echo "你输入多少次 $d"
(Dos) bucle while
Siempre que se establezca la condición, el ciclo se repetirá y se detendrá inmediatamente si falla.
1, estructura de instrucción while
while 条件测试操作
do
命令序列
done
#/bin/bash #/bin/bash
#example #example
i=0 注 i=0
while (( $i <= 10 )) 意 while [ $i -eq 10 ]
do 区 do
echo "$i" 别 let i++
let i++ echo "$i"
done done
El primer script genera el contenido de 0-10, el segundo script genera el contenido de 1-11
(Tenga en cuenta la ubicación de la iteración)
(3) Ejemplo 2
Agregue 5 usuarios comenzando con stu en lote; stu1 — stu5, contraseña inicial 1234
#/bin/bash
#useradd
i=0
while [ $i -le 4 ]
do
let i++
useradd stu$i
echo "1234" | passwd --stdin stu$i
done
Tres, hasta (bucle anti-while)
(1) hasta
Pruebe repetidamente una determinada condición, siempre que la condición no esté establecida, repita el ciclo
1, hasta que la estructura de la declaración
until 条件测试操作
do
命令序列
done
Mostrar un número entero del 1 al 10
i=1
until [ $i -gt 10 ] //i的值大于等10 不满足i>10的情况下执行循环
do
echo "$i"
let i++
done
(2) Ejemplo 1
Calcular la suma de números enteros del 1 al 50
#/bin/bash
#sum 1-50
i=1
sum=0
until [ $i -gt 50 ]
do
sum=$(($sum+$i))
let i++
done
echo "$sum"
Cuatro, dos tipos de interrupción (romper y continuar)
break salta de un solo bucle; continue aborta un comando en un bucle, pero no cancela completamente el comando completo
for i in {
1..5}
do
echo "外层循环 $i"
for b in {
1..5}
do
if [ $b -eq 3 ]
then
break //break2则也停止外层循环
fi
echo "内层循环 $b"
done
done
Seguir
for i in {
1..5}
do
echo "外层循环 $i"
for b in {
1..5}
do
if [ $b -eq 3 ]
then
continue
fi
echo "内层循环 $b"
done
done
Cinco, conversión común a personajes
cho -n significa salida sin
saltos de línea . echo -e muestra caracteres de escape y muestra el contenido de escape en la pantalla.
Los caracteres de escape comúnmente utilizados son los siguientes:
- Después de escapar de \ b, es equivalente a presionar la tecla de retroceso (retroceso), pero la premisa es que hay caracteres después de "\ b"; "\ b" significa eliminar el carácter anterior y "\ b \ b" significa eliminar los dos primeros caracteres
- \ c no ajusta la salida. Cuando no hay caracteres después de "\ c", es equivalente a echo -n; pero cuando todavía hay caracteres después de "\ c", los caracteres después de "\ c" no se mostrarán.
- \ n Nueva línea, los caracteres que se generarán comienzan en una nueva línea desde "\ n"
- \ f Newline, pero el comienzo de la nueva línea después de la nueva línea está conectado al final de la línea anterior
- \ v es lo mismo que \ f
- \ t Después del giro, significa insertar una pestaña, es decir, una pestaña horizontal
- \ r El cursor se mueve al principio de la línea, pero no se ajusta, lo que equivale a usar los caracteres después de "\ r" para sobrescribir los caracteres de la misma longitud antes de "\ r"; pero cuando no hay ningún carácter después "\ r", "\ r" El carácter anterior no se sobrescribirá
- \ Significa insertar "" en sí mismo;
Seis, separador de campo IFS
Contiene espacios, pestañas y nuevas líneas de forma predeterminadaconjunto | grep IFS
1.修改
IFS=$'\t\n'
修改成只换行
IFS=$'\n'
IFS=':'
IFS=','
2.备份
IFS. OLD=$IFS
IFS=$'\n'
...
IFS=$IFS.OLD
(1) Ejemplos de preguntas
Salida de todos los directorios contenidos en la variable de entorno PATH y todos los archivos ejecutables en ellos
por
#/bin/bash
OLDIFS=$IFS ///备份IFS参数
IFS=':' ///以:分割的字段输出,这样i就可以按字段取值
for i in $PATH
do
for a in $i/*
do
if [ -x $a -a -f $a ];then
echo "$a 文件有执行权限"
fi
done
done
IFS=$OLDIFS ///还原IFS默认值