Instructions de boucle Shell (pour boucle; boucle while; boucle jusqu'à) et interruption (pause et continue)

instruction de boucle for

  • Lire différentes valeurs de variables pour exécuter le même groupe de commandes une par une
for 变量名 in 取值列表
do                   
   命令序列
done

traverser

for i in {1..10}
      或 $(seq 1 10)
      或 ((i=1; i<=10; i++))
do
echo $i
done 

Insérez la description de l'image ici

Insérez la description de l'image ici

for i in {1..10..2} 
      或 $(seq 1 2 10)
      或 ((i=1; i<=10; i++))
do
echo $i
done 

Insérez la description de l'image ici
Insérez la description de l'image ici

Exemple 1: ajouter des utilisateurs par lots

①Créer un fichier de nom d'utilisateur
Insérez la description de l'image ici
②Ecrire un script

#!/bin/bash

a=$(cat name.txt)
 for i in a
do
 useradd $i
 echo "123456" | passwd --stdin $i
done

Insérez la description de l'image ici
③Vérification
Insérez la description de l'image ici

Exemple 2: vérifier l'état de l'hôte en fonction de l'adresse IP

#!/bin/bash

for i in 192.168.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

Insérez la description de l'image ici
Insérez la description de l'image ici

instruction while loop

  • Tester une certaine condition à plusieurs reprises et exécuter à plusieurs reprises tant que la condition est vraie
while 条件测试操作
do
   命令序列
done
#!/bin/bash

i=0
while (($i <=10))
do
echo "$i"
let i++
done

Insérez la description de l'image ici
Insérez la description de l'image ici

Exemple 1 Devinez le jeu des prix

#!/bin/bash

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 次"

Insérez la description de l'image ici
Insérez la description de l'image ici

Exemple 2: ajouter des utilisateurs par lots

#!/bin/bash

i=0
while [ $i -le 4 ]
 do
 let i++
useradd stu$i
 echo "123456" | passwd --stdin stu$i
done

Insérez la description de l'image ici
Insérez la description de l'image ici

jusqu'à instruction de boucle

  • Tester une certaine condition à plusieurs reprises et l'exécuter à plusieurs reprises tant que la condition n'est pas établie
until 条件测试操作
do
   命令序列
done
#显示1-10的整数
#!/bin/bash

i=1
until [ $i -gt 10 ]
do
 echo "$i"
 let i++
done

Insérez la description de l'image ici
Insérez la description de l'image ici

Exemple: calculez la valeur de 1 à 50

#!/bin/bash

i=1
sum=0
until [ $i -gt 50 ]
do
 sum=$(($sum+$i))
 let i++
done
 echo "$sum"

Insérez la description de l'image ici
Insérez la description de l'image ici

Pause (pause et continuer)

①break

  • sortir d'une seule boucle
#!/bin/bash

for i in {1..5}
do
echo "外层循环 $i"
 for b in {1..5}
 do
 if [ $b -eq 3 ]
  then
  break
 fi
  echo "内层循环 $b"
done
done

Insérez la description de l'image ici
Insérez la description de l'image ici

②continuer

  • continuer à abandonner une commande dans une boucle, mais pas complètement abandonner la commande entière
#!/bin/bash

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

Insérez la description de l'image ici
Insérez la description de l'image ici

Séparateur de champ IFS

  • Contient des espaces, des tabulations et des retours à la ligne par défaut
1.修改
IFS=$'\t\n'

修改成只换行
IFS=$'\n'
IFS=':'
IFS=','

2.备份
IFS. OLD=$IFS
IFS=$'\n'
...
IFS=$IFS.OLD

Exemple: afficher tous les répertoires contenus dans la variable d'environnement PATH et tous les fichiers exécutables qu'ils contiennent

#!/bin/bash

OLDIFS=$IFS
IFS=':'
  for i in $PATH
 do
  for a in $i/*
 do
 if [ -x $a -a -f $a ];then
  echo "$a 文件有执行权限"
 fi
 done
done

IFS=$OLDIFS

Insérez la description de l'image ici
Insérez la description de l'image ici

Je suppose que tu aimes

Origine blog.csdn.net/weixin_53496478/article/details/114651528
conseillé
Classement