Shell编程之流程控制语句——for循环、while循环
一、for循环 1、for循环——语法一:
for 变量 in 值1 值2 值3
do
程序
done
- 每次将值赋给变量后执行程序,每个值都复制一遍在执行;
- 值与值之间是通过空格来判断的。只要有空格,就认为是一个值;
- for循环用do和done取代了其他语言中的大括号{};
- for循环的优点,便于管理员进行系统管理时候,便于简化操作。
- for循环是这样的,in后面内容是隔开的,不管是空格,还是换行符,里面有几个内容就循环几次。
- for循环最主要的优势是:事先不需要指定变量的个数,里面有多少个值,他就循环多少次。因此更加方便于系统管理。
- 示例说明1:
[root@root sh]# pwd
/root/sh
[root@root sh]# vi for1.sh#!/bin/bash
#打印时间for time in morning noon afternoon evening
do
echo "This time is $time"
done#执行结果如下:
[root@root sh]# chmod 755 for1.sh
[root@root sh]# vi for1.sh
[root@root sh]# ./for1.sh
This time is morning
This time is noon
This time is afternoon
This time is evening
- 示例说明2:批量解压缩脚本
#!/bin/bash
#批量解压缩脚本(事先准备好十几个或二十几个压缩包)cd /lamp
#将所有的包放到了/root/lamp的目录当中
ls *.tar.gz > ls.log
#压缩包都是以.tar.gz结尾的文件名,并将其写入到 ls.log 的文件(是替换)
for i in $(cat ls.log)
do
tar -zxf $i &>/dev/null
done
rm -rf /lamp/lg.log
- 示例说明3:批量解压缩脚本
[root@root sh]# ls
case1.shcase.shfor1.shif1.shif2.shif4.sh
[root@root sh]# vi for2.sh#!/bin/bashcd /root/sh/ls *.sh > ls.logy=1
for i in $(cat ls.log)
do
echo $y
y=$(( $y + 1 ))
done[root@root sh]# chmod 755 for2.sh
[root@root sh]# ./for2.sh
1
2
3
4
5
6
7
2、for循环——语法2:
for (( 初始值;循环控制条件;变量变化 ))
do
程序
done
- 在Linux的Shell当中,只有用(())双小括号括起来才能进行加减乘除这种数值运算。
- 示例如下:从1加到100(知道循环次数)
[root@root sh]# vi for3.sh#!/bin/bashs=0
for (( i=1;
i<=100;
i=i+1 ))
do
s=$(( $s+$i ))
done
echo "The sum of 1+2+...+100 is :$s"[root@root sh]# chmod 755 for3.sh
[root@root sh]# ./for3.sh
The sum of 1+2+...+100 is :5050
注意:
语法一和语法二的区别是是否事先知道循环个数,如果事先知道就执行“ 语法二 ”,否则就执行“ 语法一 ”
- 示例说明2:批量添加指定数量的用户
[root@root ~]# vim useradd.sh#Shell脚本如下:
#!/bin/bash
#批量添加指定数量的用户
read -p "Please input user name:" -t 30 name
#输入用户名,等待30s,然后把你输入的值赋值给变量。用户名必须有规律,如,stu0、stu1...
read -p "Please input the number of users:" -t 30 num
#用户的个数
read -p "Please input the password of users:" -t 30 pass
#设置用户密码
if [ ! -z "$name" -a ! -z "$num" -a ! -z "$pass" ]
#判断这个变量里面是否为空。-z 如果为空,输出的值为真;
! -z 如果输入的值不为空,输出的值为真
# -a 是逻辑与
then
y=$(echo $num | sed 's/[0-9]//g')
# sed 's/[0-9]//g 这要我找到了0-9,只要有数字就会将这个变量的结果替换为空。
if [ -z "$y" ]
then
for (( i=1;
i<=$num;
i=i+1 ))
do
useradd $name$i &>/dev/null
echo $pass | /usr/bin/passwd --stdin $name$i &>/dev/null
donefi
fi#结果如下:
[root@root ~]# chmod 755 useradd.sh
[root@root ~]# ./useradd.sh
Please input user name:stu
Please input the number of users:3
Please input the password of users:123
... ...
tcpdump:x:72:72::/:/sbin/nologin
stu1:x:500:500::/home/stu1:/bin/bash
stu2:x:501:501::/home/stu2:/bin/bash
stu3:x:502:502::/home/stu3:/bin/bash
二、while循环与until循环 1、while循环
while循环是 不定循环 ,也称作 条件循环。只要条件判断式成立,循环就会一直继续,直到条件判断是不成立,循环才会停止。这就和for的固定循环不太一样。格式如下:
while [ 条件判断式 ]
do
程序
done
示例说明:
[root@root ~]# vim while.sh#!/bin/bash
#从1加到100
i=1
s=0
while [ $i -le 100 ]
#如果变量i 的值小于等于100,则执行循环
do
s=$(( $s+$i ))
i=$(( $i+1 ))
done
echo "The sum is:$s"[root@root ~]# chmod 755 while.sh
[root@root ~]# ./while.sh
The sum is:5050
2、until循环
until循环,和while循环相反,until循环时只要条件判断式 不成立则进行循环,并执行循环程序。一旦循环条件成立,则终止循环。示例如下:从1加到100
[root@root ~]# cp while.sh until.sh#!/bin/bash
i=1
s=0
until [ $i -gt 100 ]
do
s=$(( $s+$i ))
i=$(( $i+1 ))
done
echo "The sum is:$s"[root@root ~]# vim until.sh
[root@root ~]# ./until.sh
The sum is:5050
【Shell编程之流程控制语句——for循环、while循环】总结:
- while循环、for循环和until循环三种循环其实都是可以相互该改写的。
- Shell脚本最大的优势是:帮助管理员减少重复操作,或者说帮助管理员进行系统的运维工作;
推荐阅读
- PMSJ寻平面设计师之现代(Hyundai)
- 太平之莲
- Shell-Bash变量与运算符
- 闲杂“细雨”
- 七年之痒之后
- 深入理解Go之generate
- 由浅入深理解AOP
- 期刊|期刊 | 国内核心期刊之(北大核心)
- 生活随笔|好天气下的意外之喜
- 感恩之旅第75天