循环语句:1.for循环语句;2.while循环语句;3.until循环语句

for循环:已知循环次数的循环

shell脚本循环调用python脚本 shell 循环执行_shell脚本循环调用python脚本

执行机制

1.依次将列表中的元素赋值给“变量名”; 每次赋值后即执行一次循环体; 直到列表中的元素耗尽,循环结束。  

2.如果省略 [in WORDS ... ] ,此时使用位置参数变量 in "$@"

例:打印1到10的三种方法:

#方法一:
 [root@zy2 ~]# for i in {1..10}      #{1..10}取值列表
 > do                        #开始执行循环
 > echo $i                         
 > done                       #结束循环
 1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 
 #方法二:
 [root@zy2 ~]# for i in $(seq 1 10)
 > do
 > echo $i
 > done
 1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 
 #方法三:
 [root@zy2 ~]# for ((i=1;i<=10;i++))
 > do
 > echo $i
 > done
 1
 2
 3
 4
 5
 6
 7
 8
 9
 10

例:批量添加用户,用户名存放在users.txt文件中,初始密码均设为123456,验证脚本

for i in $(cat /opt/users.txt)
do
useradd "$i"
echo 123456 | passwd --stdin "$i"
done

例:根据ip检查主机状态,ip地址存放在ipadds.txt文件中,每行一个,使用ping命令检测各主机的连通性

for i in {1..10}
do
ping -c 2 192.168.126.$i &> /dev/null
if [ $? == 0 ]
 then
  echo host $i is online
 else
  echo host $i is offline
fi
done
[root@zy2 ~]# sh ping.sh
host 1 is offline
host 2 is online
host 3 is offline
host 4 is offline
host 5 is offline
host 6 is offline
host 7 is offline
host 8 is offline
host 9 is online
host 10 is offline

例:1-100求和

#!/bin/bash
#1-100区间求和
sum=0
for ((i=1;i<=100;i++))
do
 sum=$(($i+$sum))
done
echo $sum
[root@zy2 ~]# sh aa.sh 
5050

例:打印正三角形

#!/bin/bash
#打印正三角形
read -p "输入一个数:" n
for i in `seq 1 $n`
do
 for ((j=$n;j>i;j--))
   do
   echo -n " "
 done
     for m in `seq 1 $i`
     do
     echo -n "*"
     done
        for ((k=2;k<=i;k++))
        do
        echo -n "*"
        done
 echo " "
done
[root@zy2 ~]# sh tu2.sh 
输入一个数:7  
      * 
     *** 
    ***** 
   ******* 
  ********* 
 *********** 
*************

while循环
用于不知道循环次数,需要主动结束循环或达到条件结束循环。

1、基本格式
while   [ 判断条件] 使用while循环满足条件执行do,不满足不执行 

do       

执行动作   while循环执行动作

done         while循环结束标志

例while求和

#!/bin/bash
num=0
i=1
while [ $i -le 100 ]
do
num=$(($i+$num))
let i++
done
echo "$num"
[root@zy2 ~]# sh test1111.sh 
5050

until循环
1.基本格式
until循环通常用于当某个条件不满足时执行一些操作,比如等待某个进程退出、等待某个文件被创建等等

格式:
until  [ 条件测试操作 ]
do
    判断式/命令序列
done

例:until求和

#!/bin/bash
num=0
i=1
until [ $i -gt 100 ]
do
 num=$(($i+$num))
let i++
done
 echo "$num"

跳出循环

continue跳出循环:表示满足continue条件时跳出循环,但是不影响后续循环执行

#!/bin/bash
for i in {1..5}  #for循环5次从i=1开始到i=5    
do
if [ $i -eq 3 ]  #if判断语句,若$1等于3则执行then的内容
then
continue         #当$i=3时跳出循环但不影响后面循环  
fi               #结束if语句
echo "$i"        #没执行一次for循环输出一次$i
done
[root@zy2 ~]# sh test1_1.sh 
1
2
4
5

break跳出循环

在某个循环中遇到break直接结束此次循环,但是不影响外边嵌套的循环

#!/bin/bash 
for j in {1..3}          #第一层for循环,j=1,2,3各执行一次do的内容
do                       #第一层for循环的执行内容
    for i in {1..5}      #第二层for循环,i=1,2,3,4,5各执行一次do的内容
    do                   #第二层for循环的执行内容  
        if [ $i -eq 3 ]  #第二层for循环中添加的if判断语句,当$i=3是执行then内容
        then                
        break            #第二层for循环判断语句执行命令,break结束循环
        fi               #if语句结束
    echo "$i"            #第二层for循环语句执行每循环一次输出$i
    done                 #第二层for循环语句结束标志                
done
[root@zy2 ~]# sh test1_1.sh 
1
2
1
2
1
2

例:9*9乘法表

#!/bin/bash
for i in `seq 9`
do
 for j in `seq $i`
 do
echo -n "$j*$i=$[$i*$j] "
 done
 echo ""
done
[root@zy2 ~]# sh shell17.sh 
1*1=1 
1*2=2 2*2=4 
1*3=3 2*3=6 3*3=9 
1*4=4 2*4=8 3*4=12 4*4=16 
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81