控制结构之for循环

语法格式

for 变量 in 列表;do    #for循环会遍历整个列表,并将列表中的每一个值依次赋值给变量

    循环体

done

wKiom1Ok05aAVcF0AAJpYAGwqxM971.jpg



 

之前介绍的for循环的格式形如:

for VARNAME in list;do

    statement

    ...

done

这种格式的for循环是将list中的每一个依次值赋值给变量VARNAME,然后在执行循环体中的语句。当这个list中的没有值复制给变量VARNAME时,该循环也就结束了。


在这里我们在介绍一种类似c语言的for循环

语法格式形如:

for ((expre1;expre2;expre3));do    //注意for关键字和小括号有空格

    statement

    ...

done

其中小括号内有3个表达式,每个表达式用";"隔开

其中expre1一般为初始化变量用的,可以省略

expre2为控制条件,也就是说符合该条件的则执行循环体;不符合的则退出循环体

expre3为用于修改变量的值,也可以省略。

这种for循环的工作机制是:首先判断expre1中的变量是否符合expre2;符合则执行循环体中的语句;不符合则退出。如果符合在执行expre3,此时变量的值会发生改变,然后在判断改变的值是否符合expre2,符合则执行循环体中的语句,不符合则退出;依次类推,来完成整个循环过程。

wKiom1PPlGni1kC8AAIreKU9WG8347.jpg

其中NUM为expre1,可以省略,也可以在循环体外部声明

NUM<=105是expre2,为控制条件,该条件决定了循环次数

NUM++是expre3,用来修改变量的值



控制结构之until循环

之前我们谈到的while循环,它是当expression成立时,则执行循环体中的语句;不成立时则退出循环体中的语句。而我们的until刚好相反,当expression不成立时,则执行循环体中的语句;expression成立时则退出循环。

语法格式为:

until expression;do

    statement

    ...

done

wKiom1PPlgrC1rsHAANu8gntYmQ762.jpg

wKiom1PPliaxJ8ikAAF4jrJilgU236.jpg



另一种脚本实现方式

#!/bin/bash
#
D1='/dev/sdb'
fdisk -l | grep  -o '^Disk /dev/sd[a-z]' | awk '{print $2}'
read -p "Please choice a fdisk:" DS
while [ $DS != $D1 ];do
 if [ $DS == 'quit' ];then
  exit 7
 else
  read -p "Please choice a fdisk:" DS
 fi
done

read -p "jie xia lai de caozuo hui sunhuai shuju,hai yao jixu ma ?(y/n):" YS
until [ $YS == 'n' ];do
 if [ $YS == 'y' ];then
  for i in `seq 1 3`;do
   mount | grep $D1$i &> /dev/null
   fuser -km $D1$i &> /dev/null
   umount $D1$i
  done
  dd if=/dev/zero of=$D1 bs=512 count=1 &> /dev/null
  sync
  sleep 3
  echo '
  n
  p
  1
  
  +100M
  n
  p 
  2
  
  +200M
  n
  p
  3
  
  +200M
  t
  3
  82
  w
  ' | fdisk $D1 &> /dev/null
  partprobe $D1
  mke2fs -j ${D1}1 &> /dev/null
  sleep 2
  mke2fs -j ${D1}2 &> /dev/null
  sleep 2
  mke2fs -j ${D1}3 &> /dev/null
  sleep 2
  mkdir -pv /fd{1,2,3} &> /dev/null
  mount -t ext3 ${D1}1 /fd1
  mount -t ext3 ${D1}2 /fd2
  mount -t ext3 ${D1}3 /fd3
  exit 0
 else
  read -p "input y/n:"  YS
 fi
done