目录
- 前言
- for语句
- 常规 for 语句
- for in 语句
- while语句
前言
shell的循环控制语句和其他语言类似,主要氛围 for 语句 以及 shell语句,但是shell脚本的语法和其他语法还有些不一样,相信通过前面的学习已经看出来了。循环语句主要是用来做一些需要多次执行类似事情的操作,比如我要求从 1 加到 100 的和。
for语句
shell脚本的for语句主要分为两种,一种是和常规语言那种,一种是for in语句,接来下我们分别看两个例子。
常规 for 语句
就拿上面的例子来说,求从 1 加到 100 的和,用for语句怎么实现呢?
#!/bin/bash
# 常规 for 语句
# 求1 加到 100 的和
sum=0
for ((i=0;i<=100;i++))
do
sum=$(($sum+$i))
done
echo "最终加和的结果是 $sum"
我们看这段脚本,初始时 sum=0,i=0,第一次执行时 sum=0,i=0,第二次执行 sum=1,然后 i 由 0 加 1 变为了 1 。之后每次循环,i 的值在原来的基础上加 1 ,sum的值是用 sum 当前的值加上当前 i 的值,循环此操作知道 i 的值变为 100。相信上面的语句并不难理解,但是其语法还是有一些需要注意的地方。
for in 语句
for in 语句的作用和 普通for 语句类似,但是使用场景不一样。
#!/bin/bash
# for in 语句
for i in a b c d e f
do
echo "当前循环的字母是 $i"
done
执行上面的语句会依次输出 当前循环的字母是a 当前循环的字母是ab…,通过for i语句也可以完成累加的操作:
#!/bin/bash
# for in 语句实现累加
sum=0
for i in 1 2 3 4 5 6 7 8 9 10
do
sum=$(($sum+$i))
done
echo "累加的结果是 $sum"
看出来了吧,for in语句需要把要循环的选项按空格分割后列在 in 后面,如果我要做一个 1 加到 100 的和,这种写法是不是有点那啥!
对于普通明确知道循环次数的使用for循环可以很好完成,但是对于循环次数不确定的场景,普通 for循环就不那么好用了,这时就到了for in出场的时候了。
#!/bin/bash
# for in 语句示例
count=0
for i in `cat file1`
do
echo "当前处理的文本是 $i"
count=$(($count+1))
echo "当前处理第 $count 行文件!"
done
in 后面的待循环可以跟一个语句执行的结果,这个时候就不适合使用普通的for循环了。
while语句
while 语句和 for 语句的作用基本是一样的,二者很多时候而且可以相互替换,来看看 while怎么使用,基本语法:
while [ 待判断的条件测试语句 ]
do
当条件成立时做的事情
done (循环结束)
看一个例子,求 1 加到 100 的和
#!/bin/bash
# while 语句
sum=0
count=0
while [ $count -le 100 ]
do
sum=$(($sum+count))
count=$(($count+1))
done
echo "最后的结果是 $sum"
shell脚本中循环语句的学习就到这里了,我们来看一个众合案例。
需求:创建 100 个用户,并且设置对应的密码为其用户名
对于这个需求,我们总不能使用 useradd 一个一个去添加吧,当然一个一个加也可以做到,就是有点费耐心…,所以这种场景一定是使用我们的循环语句来完成最好。
#!/bin/bash
# 创建 100 个用户,并且设置对应的密码为其用户名
for ((i=1;i<=100;i++))
do
useradd user$i
echo user$i | passwd --stdin user$i
echo "第 $i 个用户 user$i 创建完成!"
done
这样,我们就快速的创建了 100 个用户,并且每个用户的密码都不一样(密码和自己的用户名一样),可以使用新建的账号登录试试。
当然,昨晚上面的案例,我们可以把多余的用户删除:
#!/bin/bash
# 循环删除刚才创建的100个用户
for ((i=1;i<=100;i++))
do
userdel -r user$i
echo "第 $i 个用户 user$i 删除完成!"
done
循环语句的基本内容就分享到这里了,我们下节将结合一些关键字对循环语句做更加精细的控制,我们下节见!
