shell脚本——while循环语句(包含应用案例)

while循环语法结构

while 表达式
    do
        command...
    done

while  [ 1 -eq 1 ] 或者 (( 2 > 1 ))
  do
     command
     command
     ...
 done
 
 当条件测试成立(必须为真),返回值为0才能执行循环体

应用案例

计算1-100偶数和

#!/bin/bash
#定义变量
sum=0
i=2
while [ $i -le 100 ]
do
    let sum=$sum+$i
    let i+=2
done
echo "1-100的偶数和为:$sum"

# for
#!/bin/bash
sum=0
for ((i=0;i<=100;i+=2))
do
    let sum=$sum+$i 
done
echo "1-100的偶数和为:$sum"

同步系统时间

  • 写一个脚本,30秒同步一次系统时间,时间同步服务器192.168.188.188
  • 如果同步失败,则进行邮件报警,每次失败都报警
  • 如果同步成功,也进行邮件通知,但是成功100次才通知一次
#!/bin/bash
# 该脚本用于时间同步
NTP=10.1.1.1
count=0
while true
do
    ntpdate $NTP &>/dev/null
    if [ $? -ne 0 ];then
        echo "system date failed" |mail -s "check system date"  root@localhost
    else
        let count++
        if [ $count -eq 100 ];then
        echo "systemc date success" |mail -s "check system date"  root@localhost && count=0
        fi
    fi
sleep 30
done

直角三角形

#!/bin/bash
read -p "请输入三角形的高:" h
i=1
while [ $i -le $h ]
do
        j=1 
        while [ $j -le $i ]
        do
                echo -n "*"
                let j++ 
        done
        echo
        let i++ 
done 

等腰三角形

#!/bin/bash
read -p "请输入三角形的高:" h
i=1
while [ $i -le $h ]
do
        a=$[ $h - $i ]
        j=1 
        while [ $j -le $a ]
        do
                echo -n " "
                let j++ 
        done

        b=$((2*$i - 1 ))
        k=1 
        while [ $k -le $b ]
        do
                echo -n "*"
                let k++ 
        done
        echo
        let i++
done

倒等腰三角形

#!/bin/bash
read -p "请输入三角形的高:" h
i=1
while [ $i -le $h ]
do
        j=1 
        while [ $j -le $i ]
        do
                echo -n " "
                let j++ 
        done

        k=0 
        a=$(( 2*($h-$i) - 1 ))
        while [ $k -lt $a ]
        do
                echo -n "*"
                let k++ 
        done
        echo
        let i++
done

菱形

#!/bin/bash
# by stanZ
read -p "请输入菱形半径:" h
i=1
while [ $i -le $h ]
do
        a=$[ $h -$i ]
        j=1 
        while [ $j -le $a ]
        do
                echo -n " "
                let j++ 
        done

        b=$((2*$i - 1))
        k=1 
        while [ $k -le $b ]
        do
                echo -n "*"
                let k++ 
        done
        echo
        let i++
done

u=1
while [ $u -lt $h ]
do
        for((n=1;n<=$u;n++))
        do
                echo -n " "
        done

        l=$(( 2*($h-$u)-1 ))
        for((m=1;m<=$l;m++))
        do
                echo -n "*"
        done
        echo
        let u++
done


批量创建用户

我们将需要创建的用户名和密码写入文件中 使用while遍历创建

假设文件是ip.txt
maomao 123
zhuzhu 456
niuniu 789
#!/bin/bash
#while create user
#v1.0 by stanZ 2020-12-17
if [ $# -eq 0 ];then
        echo "usage:`basename $0` file"
        exit 10
fi

if [ ! -f $1 ];then
        echo "error file"
        exit 5
fi

while read line
do
        user=`echo $line |awk '{print $1}'`
        pass=`echo $line |awk '{print $2}'`
        id $user &>/dev/null
        if [ $? -eq 0 ];then    
                echo "$user already exists"
        else
                useradd $user
                echo "$pass" |passwd --stdin $user &>/dev/null
                if [ $? -eq 0 ];then
                        echo "$user is created."
                fi
        fi
        done < $1

测试网段存活主机

ping3次 如果都失败 则判断主机没有存活

#!/bin/bash
while read ip
do
        fail_count=0
        #for i in `seq 3`
        for i in {1..3}
        do  
                ping -c1 -W1 $ip &>/dev/null
                if [ $? -eq 0 ];then
                        echo "$ip ping is ok."
                        break
                else
                        echo "$ip ping is failure:$i"
                        let fail_count++
                fi  
        done
        if [ $fail_count -eq 3 ];then
                echo "$ip ping is failure!!!"
        fi  
done <ip.txt
  • 19
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值