目录
1.for循环
1.1 for循环取值列表的多种表达方式
1.2 for循环嵌套
2.while循环
3.until循环
4.break、continue、exit
4.1 break
4.2 continue
4.3 exit
1.for循环
for循环格式
for var in item1 item2 ... itemN var为控制循环次数的变量,in后面的则是取值列表
do
command command满足取值列表则执行的命令
done
当变量值在列表里,for 循环即执行一次所有命令,使用变量名获取列表中的当前取值。命令可为任何有效的 shell 命令和语句。in 列表可以包含替换、字符串和文件名。
in列表是可选的,如果不用它,for循环使用命令行的位置参数
例如
for i in 1 2 3 4 5
do
echo "$i"
done
输出结果:
1
2
3
4
5
1.1 for循环取值列表的多种表达方式
除了上面的写法,for循环的取值列表还有其他的写法
1.
for i in {1..10}
do
command
done
表示从1开始循环十次
2.
for i in {1..10..2}
do
command
done
表示从1开始,每次循环结束,i自加2,到10结束整个循环
3.
for ((i=1;i<=10;i++))
do
command
done
表示从1开始,循环十次
1.2 for循环嵌套
for循环的嵌套适用于较为复杂的环境比如有规律的图形化输出
1.打印九九乘法表
#!/bin/bash
for ((i=1;i<=9;i++))
#外循环控制行数
do
for ((j=1;j<=$i;j++))
#内循环控制列数
do
echo -n -e "$j*$i=$((i*j)) \t"
#打印九九乘法不换行且输出之间跟制表符
done
echo
#换行
done
输出结果
2.打印矩形
#!/bin/bash
for ((i=1;i<=10;i++))
#外循环控制行数
do
for ((j=1;j<=20;j++))
#内循环控制列数
do
echo -n "*"
#不换行输出符号“*”
done
echo
#换行
done
输出结果:
2.while循环
需要满足某种条件时可以使用,不知道循环次数时使用死循环可以配合退出语句实现循环操作
while循环格式
while [ 条件判断 ]
do
command
done
例题:
1.输出1到100的和
#!/bin/bash
sum=0
#设置和变量
i=0
#设置计数器
while [ $i -le 100 ]
#当计数器小于100时满足条件
do
sum=$[i+sum]
#加运算
let i++
#计数器自加,while迭代
done
echo "$sum"
#输出结果
运行结果
包含if判断的while程序
2.判断用户是否存在
#!/bin/bash
cat /root/users.txt|while read line
#将users.txt作为循环条件输出到while循环
do
cat /etc/passwd |grep $i
#提取passwd文件,查看用户是否存在
if [ $? == 0 ];then
#判断上条命令结果是否为真
echo "用户已存在"
#如果为真,输出上面内容
else
#如果为假,输入下面内容
read -p "请输入密码" p
useradd $i
echo $p |passwd --stdin $i &>/dev/null
fi
done
3.until循环
until循环和while循环结构相似,但是判断的机制相反,until是不满足条件的时候一直循环使用
代码格式
until [ 条件判断 ]
do
command
done
例题
计算1到100的和
#!/bin/bash
sum=0
#和变量
i=0
#计数器
until [ $i -gt 100 ]
#当i不满足大于100时执行循环
do
sum=$[i+sum]
#和运算
let i++
#计数器自加,until迭代
done
echo "$sum"
#输出结果
结果
until相较于for和while来说,使用的频率较少
4.break、continue、exit
4.1 break
break:跳出单层循环,break 2 跳出2层循环,循环内break后面的语句不会执行,但是循环外的语句仍然会执行
4.2 continue
continue:终止某个循环体中的某次循环的执行,但不会完全终止整个循环 ,while until 循环中使用需要慎重!因为如果continue放在变量迭代语句前面会造成死循环
4.3 exit
exit:退出shell脚本进程,exit执行后,脚本后面所有的语句都不会执行
例题
#!/bin/bash
i=0
while [ $i -le 2 ]
#当i小于等于2时执行
do
read -p "请输入密码" pas
#键盘输入
if [ $pas != "123456" ];then
#条件判断密码对不对
echo "密码不正确"
#不对,输出上面信息
continue
#结束本轮循环
elif [ $pas == "123456" ];then
#判断密码是否等于123456
echo "密码正确"
#对输出密码正确
break
#跳出循环
let i++
#计数器自加,循环迭代
fi
done
if [ $i == "3" ];then
#计数器判断,等于3就报警
echo "报警"
fi