shell编程之循环结构

1、shell循环for语句
for循环的运作方式,是讲串行的元素意义取出,依序放入指定的变量中,然后重复执行含括的命令区域(在do和done之间),直到所有元素取尽为止
其中,串行是一些字符串的组合,彼此用5IF5所定义的分隔符(如空格符)隔开,这些字符串称为字段
1.1、for循环的语法结构
for 变量 in 值集合
do
执行命令
done
1.2、for 语法说明
for 每次从值集合中取一个值赋值给变量
do-done将赋值后的变量带入执行的命令得到执行结果,
重复以上两个步骤,直到值集合中的值被一一获取赋值给变量得到所有结果,循环结束
1.3、实例
1、用for循环创建demo-demo10,然后在demo1-demo10创建test1-test10

    vi mkdir.sh
for i in {1..10}
do
  mkdir -p /datas/demo$i
  for o in {1..10}
  do
    mkdir -p /datas/demo$i/test$o
  done
done

在这里插入图片描述
2、列出 var目录下各子目录占用磁盘空间的大小

    vi var.sh
DIR="/var"
cd $DIR
for i in $( ls $DIR )
do
  [ -d $i ] && du -sh $i
done

在这里插入图片描述
2、Shell 循环while语句
2.1、while 循环语法结构
while 条件测试
do
执行命令
done
2.2、while 语法说明
while 首先进行条件测试,如果传回值为0(条件测试为真),则进入循环,执行命令区域,否则不进入循环
满足while 测试条件,执行命令区域,直到while的测试条件不满足结束执行 while循环(如果条件一直满足执行无穷循环)
2.3、实例1 while循环读取文件的内容

  vi while.sh
while read a #使用read有标准输入读取数据,赋值变量demo中,如果读到的数据非空,就进入循环,显示读取到的内容
do
  echo $a
done < /etc/hosts

在这里插入图片描述
2.4、实例2 while条件测试

  vi sum.sh
declare -i i=1    #声明设置i和sum为整数型
declare -i sum=0
while((i<=10))  #while条件测试:只要值小于或者等于10,就执行循环
do
    let sum+=i #sum+=i和sum=sum+i是一样的,sum累加上i
    let i++   #let i+,1的值递增1,此行是改变条件测试的命令,一旦i大于18,可终止循环
done      #遇到done,回到while条件测试
echo $sum    #直到while条件不满足,显示sum的值

在这里插入图片描述
2.5、实例3 while 99乘法表

  vi 99.sh
a=1 b=1
while((a<=9))
do 
  while((b<=a))
  do
  let " c=a*b "  #声明变量c
  echo -n " $a*$b=$c "  #echo 输出显示的格式,-n不换行输出
  let b++
  done
let a++
let b=1  #因为每个乘法表都是1开始乘,所以b要重置
echo ""  #显示到屏幕换行
done

在这里插入图片描述
3、Shell 循环 until语句
While循环的条件测试是测真值,until循环则是测假值。
3.1、until循环的语法结构
until 条件测试
do
执行命令
done
3.2、until 语法说明
until条件测试结果为假(传回值不为0),就进入循环。
条件测试不满足,执行命令区域。直到until条件满足,结束执行until循环(如果条件一直不满足则执行无穷循环)。
3.3、实例1 until单层条件测试

在这里插入代码片  vi sum.sh
declare -i i=10    #声明设置1和sum为整数型
declare -i  sum=0
until ((i>10))  #while条件测试:只要值小于或者等于10,就执行循环
do
    let sum+=i #sum+=i和sum=sum+i是一样的,sum累加上i
    let i++   #let i+,1的值递增1,此行是改变条件测试的命令,一旦i大于18,可终止循环
done      #遇到done,回到while条件测试
echo $sum    #直到while条件不满足,显示sum的值

在这里插入图片描述
3.4、实例2 until双层条件测试

  vi 99.sh
a=1
b=1
until((a>9))
do
  until((b>a))
  do
  let " c=a*b "  #声明变量c
  echo -n " $a*$b=$c "  #echo 输出显示的格式,-n不换行输出
  let b++
  done
let a++
let b=1  #因为每个乘法表都是1开始乘,所以b要重置
echo ""  #显示到屏幕换行
done

在这里插入图片描述
4、Shell 循环控制
4.1、Shell 循环控制说明
break,continue,exit一般用于循环结构中控制循环的走向
break n n表示跳出循环的次数,如果省路n表示跳出整个循环
continue n n表示退到第n层继续循环,如果省路n表示册跳过本次循进入下一次循环
exit n 退出当前的shell程序,并返回n,n也可以省略
return 用于返回一个退出值给调用的函数
shift 用于将参数列表list左移指定次数,最左端的那个参数就从列表中删除,其后边的参数继续进入循环
4.2、break指令
break[N]:提前结束第N层循环,最内层为第1层

  vi test.sh
for i in {1..10}
do
[ $i -eq 5 ] && break
echo i=$i
sleep 0.5
done 
echo test is finisned

在这里插入图片描述
在这里插入图片描述
4.3、continue指令
continue[N]:提前结束第N层的本轮循环,而直接进入下一轮判断;最内层为第1层

  vi continue.sh
for((i=0;i<=5;i++))
  do
    if [ $i -eq 3 ];then
      continue;
  fi
  echo $i
  done
echo "ok"

在这里插入图片描述
4.4、exit指令

  vi exit.sh
for((i=0;i<=5;i++))
  do
    if [ $i -eq 3 ];then
      exit
  fi
  echo $i
  done
echo "ok"

在这里插入图片描述
4.5、shift指令
shift命令用于将参数列表ist左移指定次数,最左端的那个参数就从列表中删除,其后边的参数继续进入循环
shift[N]:用于将参量列表list左移指定次数,缺省为左移一次。
参量列表list一旦被移动,最左端的那个参数就从列表中删除。while 循环遍历位置参量列表时,常用到shift
实例

  vi shift.sh
while [ $# -gt 0 ]
do
  echo $*
  shift
done

在这里插入图片描述


版权声明:本文为qq_48644092原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。