while 死循环 无限循环 只要条件为真,就可以无限循环下去
for 循环
条件为真时,执行循环语句,当条件为假时,循环结束,退出循环
#语法
for 变量 in 取值列表
do
循环体
done
#取值列表
#for取值列表有很多种方法进行取值,值存放在in的后面, 默认是以空白字符为分割符
[root@shell /scripts]# cat for-1.sh
#!/bin/bash
for i in file1 file2 file3
do
echo $i
echo "本次循环结束!"
done
[root@shell /scripts]# sh for-1.sh
file1
本次循环结束!
file2
本次循环结束!
file3
本次循环结束!
#如果取值列表中出现特殊字符,使用转义字符进行转义
[root@shell /scripts]# cat for-2.sh
#!/bin/bash
for i in file1 \$file2 file3
do
echo $i
echo "本次循环结束!"
done
[root@shell /scripts]# sh for-2.sh
file1
本次循环结束!
$file2
本次循环结束!
file3
本次循环结束!
#取值列表中的单独的值存在空格时,需要对其使用引号括起来
[root@shell /scripts]# cat for-2.sh
#!/bin/bash
for i in 'file1 test' file2 file3
do
echo $i
echo "本次循环结束!"
done
[root@shell /scripts]# sh for-2.sh
file1 test
本次循环结束!
file2
本次循环结束!
file3
本次循环结束!
#根据变量进行取值
[root@shell /scripts]# cat for-3.sh
#!/bin/bash
List="file1 file2 file3"
for i in $List
do
echo $i
echo "本次循环结束!"
done
[root@shell /scripts]# sh for-3.sh
file1
本次循环结束!
file2
本次循环结束!
file3
本次循环结束!
#通过命令中进行取值
[root@shell /scripts]# cat for-4.sh
#!/bin/bash
for i in $(cat /etc/hosts)
do
echo $i
echo "本次循环结束!"
done
[root@shell /scripts]# sh for-4.sh
127.0.0.1
本次循环结束!
localhost
本次循环结束!
localhost.localdomain
本次循环结束!
localhost4
本次循环结束!
localhost4.localdomain4
本次循环结束!
::1
本次循环结束!
localhost
本次循环结束!
localhost.localdomain
本次循环结束!
localhost6
本次循环结束!
localhost6.localdomain6
本次循环结束!
#取值列表中,指定分割符
[root@shell /scripts]# cat for-5.sh
#!/bin/bash
IFS=$'\n' #指定换行符为分割符
for i in $(cat /etc/hosts)
do
echo $i
echo "本次循环结束!"
done
[root@shell /scripts]# sh for-5.sh
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
本次循环结束!
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
本次循环结束!
#以冒号为分割符
[root@shell /scripts]# cat for-5.sh
#!/bin/bash
IFS=:
for i in $(head -1 /etc/passwd)
do
echo $i
echo "本次循环结束!"
done
[root@shell /scripts]# sh for-5.sh
root
本次循环结束!
x
本次循环结束!
0
本次循环结束!
0
本次循环结束!
root
本次循环结束!
/root
本次循环结束!
/bin/bash
本次循环结束!
#指定多个分割符
[root@shell /scripts]# cat for-5.sh
#!/bin/bash
IFS=:' ' #以冒号或者空格为分隔符
for i in $(cat test.txt)
do
echo $i
echo "本次循环结束!"
done
[root@shell /scripts]# sh for-5.sh
root
本次循环结束!
x
本次循环结束!
123
本次循环结束!
rot
本次循环结束!
oldboy
本次循环结束!
567
本次循环结束!
#for循环中的C语言风格
把数字从1到9进行升序排序
[root@shell /scripts]# cat for-6.sh
#!/bin/bash
for ((i=1;i<10;i++))
do
echo $i
done
[root@shell /scripts]# sh for-6.sh
1
2
3
4
5
6
7
8
9
#打印两个变量值 升序 降序
[root@shell /scripts]# cat for-6.sh
#!/bin/bash
for ((a=1,b=9;a<10;a++,b--))
do
echo $a $b
done
[root@shell /scripts]# sh for-6.sh
1 9
2 8
3 7
4 6
5 5
6 4
7 3
8 2
9 1
for循环实现两个数字的升序和降序
[root@shell /scripts]# cat for-7.sh
#!/bin/bash
a=0
b=10
for i in {1..9}
do
let a++
let b--
echo $a $b
done
[root@shell /scripts]# sh for-7.sh
1 9
2 8
3 7
4 6
5 5
6 4
7 3
8 2
9 1