循环

一、while循环
1.while语法

while循环只有条件成立,则就会反复执行循环体里面的命令,直到条件为假时,才会结束

无限的循环下去,死循环。

while 条件测试
do
循环体
done

三种写法


while true 或者 :
do
循环体
done


while read line
do
循环体
done < file.txt


while [ 条件判断 ]
do
循环体
done
2.结束循环
1)break

!/bin/bash


count=0

while [ $count -lt 5 ]  # 1 < 5
do
   if [ $count -eq 3 ];then
        break
   fi
   echo $count
  let count++  # 3
done

break 之后的命令不再运行

2)循环体中把某个值改掉,让条件为假
[root@Centos7 ~]# cat test.sh

!/bin/bash


count=0
while [ $count -lt 3 ]
do
   echo 1111
   
   count=100
   
   echo 2222
   echo 3333

done
3) continue

!/bin/bash


count=0

while [ $count -lt 5 ]  # 1 < 5
do
   if [ $count -eq 3 ];then
        continue
   fi
   echo $count
  let count++  # 3
done

continue 结束本次循环进入下一轮,之后的命令还会运行

3)嵌套多层循环

不推荐使用,脚本还是越简洁越好

break结束嵌套多层的循环

while 条件1
do
while 条件2
   do
       while 条件3
       do
      break 3
       done
       # break
   done
   # break
done

把条件改为false

tag=true
while $tag
do
while $tag
   do
       while $tag
       do
      tag=false
       done
   done
done
3.写一个登入认证脚本(仅3次)

!/bin/bash

db_name="jkz"
db_pass="111"
count=0

while [ $count -lt 3 ]
do
  read -p "请输入你的用户名>>> " username
  read -p "请输入你的密码>>> " password

if [ "$db_name" == "$username" -a "$db_pass" == "$password" ];then
        echo "login successful"  
            while true;do
                read -p "输入命令>>> " ll
                $ll
                        if [ "$ll" == "q" ];then
                      break 1
                    elif [ "$ll" == "qq" ] ;then
                      break 2
                    fi
             done
   elif [ -z "$username" -o -z "$password" ];then
           echo "用户或密码不能为空"
          let count++
   else
         echo "user or password error"
        let count++
              if [ $count -eq 3 ];then
                  echo "只能输入3次"
              fi
   fi
echo "--------------------------"
done
4.访问网站脚本,三次出错就报警

!/bin/bash


[ $# -ne 1 ] && echo "只能输入一个参数" && exit

url=$1
count=0

while true
do
   echo "=========>$count"
   if [ $count -eq 3 ];then
       echo "报警:$url is dead"
      break
   fi
   
   wget --timeout=1 --tries=3 $url -q
   if [ $? -eq 0 ];then
       echo "$url is ok"
      break
   else
let count++        
   fi
done
5.动态监测系统状态
while :;do free;sleep 0.5;clear;done
6. 99乘法表

!/bin/bash

a=1
while [ $a -le 9 ];do
  b=1
   while [ $b -le $a ];do
      echo -en "${b}x${a}=$(($a*$b))\t"
      let b++
   done
   echo ""
  let a++
done
二.until循环

条件为false就执行循环体代码,条件变为true循环结束,与while相反

until 条件
do
  命令1
  命令2
  命令3
  ...
done

示例

!/bin/bash


count=0

until [ $count -eq 5 ]  
do
   echo $count
  let count++  # 5
done

  1. 99乘法表

!/bin/bash

a=1
until [ $a -gt 9 ]
do
   b=1
   until [ $b -gt $a ]
   do
       echo -en "${b}x$a=$(($a*$b))\t"
      let b++
   done
   echo ""
  let a++
done
三、for循环
1.shell风格
for i in 值1 值2 值3
do
   echo $i
done

示例

!/bin/bash


for i in ls /scripts/day05
do
   mv $i ${i/txt/sh}
done

!/bin/bash


for i in {1..254}
do
   ping -c1 10.0.0.$i &>/dev/null
  [ $? -eq 0 ] && echo 10.0.0.$i
done
2.C风格

!/bin/bash


for ((i=0;i<3;i++))
do
   echo "命令1"
   echo "命令2"
   echo "命令3"
done
3.break与continue在for循环中的应用
[root@Centos7 ~]# cat 9.sh

!/bin/bash


for i in {A..Z}
do
  if [ $i == "C" ];then
    # break
    continue
  fi
  echo $i
done
[root@Centos7 ~]#
4.统计文件夹下所有的文件类型

!/bin/bash


[ $# -ne 1 ] && echo "必须传入一个参数" && exit

regular=0
dir=0
link=0
other=0

for fname in ls $1
do
if [ -L "$1/$fname" ];then
  let link++
   elif [ -f "$1/$fname" ];then
      let regular++
   elif [ -d "$1/$fname" ];then
  let dir++
   else
        let other++
   fi
done

echo "标准文件个数:$regular"
echo "目录文件个数:$dir"
echo "软连接文件个数:$link"
echo "其他文件个数:$other"

5. 99乘法表

!/bin/bash

for a in {1..9}
do
   for b in $(seq 1 $a)
   do
       echo -en  "${b}x$a=$(($a*$b))\t"
   done
   echo ""  #空行 换行符
done

第二种

!/bin/bash

a=1
while [ $a -le 9 ];do
b=1
while [ $b -le $a ];do
echo -en "${b}x${a}=$(($a*$b))\t"
let b++
done
echo ""
let a++
done

第三种

!/bin/bash

a=1
until [ $a -gt 9 ]
do
b=1
until [ $b -gt $a ]
do
echo -en "${b}x$a=$(($a*$b))\t"
let b++
done
echo ""
let a++
done

posted @ 2021-06-01 10:38  柯正  阅读(196)  评论(0)    收藏  举报