Shell脚本之for循环、while循环,if语句、case语句1. for循环
⼀般格式:
格式1:
for((条件))
do
动作
done
格式2:
for  变量名  in  范围
do
动作
done
实验:
##1. 输出数字:1-5
[root@localhost ~]# vim for01.sh
>>>####
#!/bin/bash
for NUM in {1..5}
do
echo $NUM
done
[root@localhost ~]# sh for01.sh
1
2
3
4
5
##2.将输出数字:1-6 并且间隔为2
[root@localhost ~]# vim for02.sh
>>>####
#!/bin/bash
for NUM in `seq 1 2 6`    ## 2表⽰步长
do
echo $NUM
done
[root@localhost ~]# sh for02.sh
1
3
5
⽰例1:检测所有1-60的ip⽹络通信状态
[root@localhost mnt]# vim ip_check.sh
>>>>#
#!/bin/bash
for((i=1;i<=60;i++))
do
ping -c1 -w1 172.25.254.$i > /dev/null && echo 172.25.254.$i is UP || echo 172.25.254.$i is DOWN    sleep 1
done
注释:
> /dev/null    ##将冗余的输出信息导⼊到垃圾箱中
sleep 1          ##每秒刷新⼀次
&&      ##表⽰若能与主机能进⾏通信则输出....UP
||      ##表⽰若不能与主机进⾏通信则输出....DOWN
[root@localhost mnt]# sh ip_check.sh
⽰例2:10s倒计时
[root@localhost mnt]# vim time.sh
>>>>#
#!/bin/bashlinux循环执行命令脚本
for((i=10;i>0;i--))
do
echo -n " After $i's is end "
echo -ne "\r"
sleep 1
done
注释:
\r      ##表⽰回车:覆盖之前的输出(注意:必须加-e解析)
sleep 1  ##表⽰每秒刷新1次
[root@localhost mnt]# sh time.sh
练习1:⽤户以 分:秒 格式输⼊时间 进⾏倒计时
编写脚本:
[root@localhost mnt]# vim time_ms.sh
>>>>#
#!/bin/bash
read -p 'please input minute:' a      ##⽤变量a来接收⽤户输⼊的分钟
read -p 'please input second:' b      ##⽤变量b来接收⽤户输⼊的秒钟
[ "$b" -gt 60 ]&&{                    ##判断输⼊的秒钟是否符合实际,⼀般秒位不超过为60即为⼀分钟(其实不做判断也可以的)    echo "EROOR: please input a correct second!"
exit 1
}
c=$[$a*60+$b]            ##将分钟和秒都化为以秒为单位;转换关系:⼀分钟等于60秒
for((;c>=0;c--))
do
m=$[$c/60]          ##计算新的分钟
s=$[$c%60]          ##计算新的秒钟
echo -n "Time is $m:$s "
echo -ne "\r"        ##覆盖前⼀秒的输出信息
sleep 1              ##每秒刷新⼀次
done
执⾏脚本:
[root@localhost mnt]# sh time_ms.sh
[root@localhost mnt]# sh time_ms.sh
2. while循环
⼀般格式:
while  条件
do            ##满⾜条件则执⾏动作
动作
done
实验:
[root@localhost ~]# vim while.sh
>>>####
while true    ## 死循环,若没有外界条件的⼲扰,则会⼀直循环不停⽌do
echo -n `uptime`
echo -ne "\r"    ## -e表⽰解析,-r表⽰回车,即覆盖上⼀秒的输出信息    sleep 1          ## 每秒刷新⼀次
done
[root@localhost ~]# sh while.sh
^C:37:17 up 58 min, 3 users, load average: 0.14, 0.05, 0.06
⽰例3:批量创建⽤户并给其设定密码为123
##⾮交互式设定⽤户密码
[root@localhost mnt]# echo "123" | passwd student --stdin
[root@localhost mnt]# ls /home
student
[root@localhost mnt]# sh user.sh
>>>>#
#!/bin/bash
USERNAME="westos"
i=1
while [ $i -le 10 ]                ##当满⾜表达式时则执⾏do中的命令
do
useradd ${USERNAME}$i          ##创建⽤户
echo "123" | passwd ${USERNAME}$i --stdin &> /dev/null      ##⾮交互式设定⽤户密码    ((i++))
done
[root@localhost mnt]# sh user.sh
测试:
##检验⽤户是否创建成功
[root@localhost mnt]# ls /home/
student  westos10  westos3  westos5  westos7  westos9
westos1  westos2  westos4  westos6  westos8
##检验密码是否设定成功
[root@localhost mnt]# su - westos1
[westos1@localhost ~]$ su - westos2
Password:
[westos2@localhost ~]$ exit
logout
[westos1@localhost ~]$ exit
logout
3.嵌套循环

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。

发表评论