09-shell编程-循环

一、概念

for循环:常用的循环方式;

while循环:条件循环,可以加入条件判断,死循环.....

#########################

do  until循环:很少使用;

二、for循环

1,格式

· shell格式

for   变量   in  循环体

do

        命令

done

· c语言格式

for ((i=1; i<=10; i++))

do

        echo  $i

done

3,案例

· 循环10次

1,第一种方式

[root@gong ~]# vim for.sh

#!/bin/bash

for i in 0 1 2 3 4 5 6 7 8 9
do
        echo $i
done

[root@gong ~]# sh for.sh 
0
1
2
3
4
5
6
7
8
9

2,第二种方式

[root@gong ~]# vim for.sh

#!/bin/bash

for i in `seq 10`           
do
        echo $i
done

[root@gong ~]# sh for.sh 
1
2
3
4
5
6
7
8
9
10

3,第三种方式

[root@gong ~]# vim for.sh

#!/bin/bash

for i in {0..9}
do
        echo $i
done

[root@gong ~]# sh for.sh 
0
1
2
3
4
5
6
7
8
9

4,第四种方式:c语言格式

[root@gong ~]# vim for.sh

#!/bin/bash

for((i=1; i<=10; i++))
do
        echo $i
done

[root@gong ~]# sh for.sh 
1
2
3
4
5
6
7
8
9
10

· 打印/etc/目录下有什么

[root@gong ~]# vim for.sh

#!/bin/bash

for i in `ls /etc/`
do
        echo $i
done

[root@gong ~]# sh for.sh 
abrt
adjtime
aliases
aliases.db
alternatives
anacrontab
asound.conf
..............

三、while循环

1,概述

        while循环,可以加入条件,可以写死循环无限递归,还可以读取文件;

        简单来讲,while循环只会在满足条件后运行;

2,格式

while  条件判断

do

        命令

done

3,案例

· 使用while循环1到10

[root@gong ~]# vim while.sh

#!/bin/bash

var=1
while [ $var -le 10 ]
do
        echo $var
        let var++
done

#var++就是var=var+1

[root@gong ~]# sh while.sh 
1
2
3
4
5
6
7
8
9
10

· 计算1+2+3+..100的值

[root@gong ~]# vim while.sh

#!/bin/bash

var=1
sum_result=0
while [ $var -le 100 ]
do
        let sum_result=sum_result+var
        let var++
done

echo $sum_result

[root@gong ~]# sh while.sh 
5050

· 死循环

[root@gong ~]# vim while.sh

#!/bin/bash

i=1
while true 
do
        echo "心机之蛙-死循环 $i"
        let i++

        sleep 1
done

[root@gong ~]# sh while.sh 
心机之蛙-死循环 1
心机之蛙-死循环 2
心机之蛙-死循环 3
心机之蛙-死循环 4
心机之蛙-死循环 5

..............

4,循环嵌套

· 案例:抓阄

        执行脚本后,用户输入自己的姓名全拼,然后随机为其生成1-100的数字,数字最大的前三名,为中奖人,随机数字不能重复,输入完名字之后,程序脚本不退出,继续等待下一个人输入,当输入end时,退出脚本;

[root@gong ~]# vim while.sh

        if [ $name = end ];then
#!/bin/bash

>name_num.txt

while true
do
        read -p "请输入您的姓名全拼:" name
        if [ $name = end ];then
                echo "抓阄结束,等待下一次活动!"
                cat name_num.txt | sort -rnk2
                exit
        fi

        while true
        do
                ran=`echo $((RANDOM%99+1))`
                if [ `grep -w '$ran' name_num.txt |wc -l ` -eq 1 ]; then
                        #再次从头开始循环;不往下走了;
                        continue
                else
                        #退出整个while循环
                        break
                fi
        done
        echo -e "$name \t $ran "  | tee -a  name_num.txt
done

[root@gong ~]# sh while.sh 
请输入您的姓名全拼:xin
xin      33 
请输入您的姓名全拼:ji
ji      4 
请输入您的姓名全拼:zhi
zhi      78 
请输入您的姓名全拼:wa
wa      97 
请输入您的姓名全拼:xinjizhiwa
xinjizhiwa      58 
请输入您的姓名全拼:xjzw
xjzw      12 
请输入您的姓名全拼:haha
haha      55 
请输入您的姓名全拼:hehe
hehe      99 
请输入您的姓名全拼:xixi
xixi      81 
请输入您的姓名全拼:end
抓阄结束,等待下一次活动!
hehe      99 
wa      97 
xixi      81 
zhi      78 
xinjizhiwa      58 
haha      55 
xin      33 
xjzw      12 
ji      4 

· 小结

continue   # 循环中,不在往下运行了,从头重新循环;

break        #退出循环,结束循环;

5,while循环读文件

        在需要使用脚本读取文件的多行内容时使用;(三剑客、while循环都可以)

· 写法格式

第一种方式

exec<文件路径

while  read   变量

do

        echo  $变量

done

第二种方式

cat  文件路径  |  while read   变量

do

        echo  $变量

done

第三种方式:常用,必会,重点

while  read  变量

do

        echo  $变量

done<文件路径

· 案例

1,计算文件有多少行

[root@gong ~]# vim while.sh 

#!/bin/bash

file=name_num.txt
num=0
while read line
do
        let num++
done<$file
echo "文件中行数是:$num"

[root@gong ~]# sh while.sh 
文件中行数是:9

2,将每行的两列分别读出来

[root@gong ~]# vim while.sh 

#!/bin/bash

file=name_num.txt
i=0
while read name num
do
        echo "姓名是:$name 分数是:$num"
        let i++
done<$file
echo "文件中行数是:$i"

[root@gong ~]# sh while.sh 
姓名是:xin 分数是:33
姓名是:ji 分数是:4
姓名是:zhi 分数是:78
姓名是:wa 分数是:97
姓名是:xinjizhiwa 分数是:58
姓名是:xjzw 分数是:12
姓名是:haha 分数是:55
姓名是:hehe 分数是:99
姓名是:xixi 分数是:81
文件中行数是:9

6,小结

exit   #结束脚本,终止脚本;在后面价格返回值,可以当做$?的返回值;

return   #函数的终止符,终止执行函数,函数的返回值设置;

break    #终止循环,退出循环;

continue   #不再往下循环了,从头开始循环;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心机の之蛙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值