一、概念
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++
doneecho $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
fiwhile 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 #不再往下循环了,从头开始循环;