运维之shell篇-----3.循环结构 、 case语句 、 函数及中断控制
来源:互联网 发布:qq2012透明皮肤软件 编辑:程序博客网 时间:2024/05/22 15:42
THREE DAY
1.使用for循环结构
2.使用while循环结构
3.基于case分支编写脚本
4.使用Shell函数
5.中断及退出
for 变量名 in 值列表
Do
命令序列
Done
步骤一:练习for循环基本用法
脚本1,通过循环读取账户文件user.txt,批量创建账户:
- [root@svr5 ~]# vim for01.sh
- #!/bin/bash
- for i in $(cat root/user.txt)
- do
- useradd $i
- echo "123456" | passwd --stdin $i
- done
- [root@svr5 ~]# chmod +x for01.sh
步骤二:批量检测多个主机的存活状态
1)编写脚本如下:
- [root@svr5 ~]# vim chkhosts.sh
- #!/bin/bash
- for IP in {1..254}
- do
- ping -c 3 -i 0.2 -W 3 192.168.4.$IP &> /dev/null
- if [ $? -eq 0 ] ; then
- echo "Host 192.168.4.$IP is up."
- else
- echo "Host 192.168.4.$IP is down."
- fi
- done
- [root@svr5 ~]# chmod +x chkhosts.sh
4)测试、验证脚本
- … …
- [root@svr5 ~]# ./chkhosts.sh
- Host 192.168.4.5 is up.
- Host 192.168.4.6 is down
while 条件测试
Do
命令序列
Done
步骤一:批量添加用户账号stu1-stu20
添加的账号有固定的前缀stu(练习中可自行设置),多个账号从1开始编号,比如stu1、stu2、stu3、……、stu20。—— 编写脚本uaddwhile.sh,实现批量添加这20个用户账号的功能,密码均设为123456。
脚本编写参考如下:
- [root@svr5 ~]# vim uaddwhile.sh
- #!/bin/bash
- PREFIX="stu" //定义用户名前缀
- i=1
- while [ $i -le 20 ]
- do
- useradd ${PREFIX}$i //添加的用户名为:前缀+编号
- echo "123456" | passwd --stdin ${PREFIX}$i &> /dev/null
- let i++
- done
- [root@svr5 ~]# chmod +x uaddwhile.sh
执行脚本并验证结果:
- [root@svr5 ~]# ./uaddwhile.sh
- [root@svr5 ~]# grep ^stu /etc/passwd //检查添加的用户
- stu1:x:531:531::/home/stu1:/bin/bash
- stu2:x:532:532::/home/stu2:/bin/bash
- stu3:x:533:533::/home/stu3:/bin/bash
- stu4:x:534:534::/home/stu4:/bin/bash
- stu5:x:535:535::/home/stu5:/bin/bash
- … …
步骤二:批量删除用户账号stu1-stu20
针对前面执行uaddwhile.sh脚本批量添加的用户账号,再建立一个批量删除这些账号的脚本udelwhile.sh。结构类似,只要替换为删除相关的操作即可。
脚本编写参考如下:
- [root@svr5 ~]# vim udelwhile.sh
- #!/bin/bash
- PREFIX="stu"
- i=1
- while [ $i -le 20 ]
- do
- userdel -r ${PREFIX}$i &> /dev/null
- let i++
- done
- [root@svr5 ~]# chmod +x udelwhile.sh
执行脚本并验证结果:
- [root@svr5 ~]# ./udelwhile.sh
- [root@svr5 ~]# grep ^stu /etc/passwd //再检查已无相应账号信息
- [root@svr5 ~]#
步骤三:检测192.168.4.0/24网段,列出不在线的主机地址
1)任务需求及思路分析
要求的是“检测192.168.4.0/24网段,列出不在线的主机地址”。
检测目标是一个网段,其网络部分“192.168.4.”可以作为固定的前缀;而主机部分包括从1~254连续的地址,所以可结合while循环和自增变量进行控制。
2)根据实现思路编写脚本
- [root@svr5 ~]# vim chknet.sh
- #!/bin/bash
- NET="192.168.4."
- i=1
- while [ $i -le 254 ]
- do
- IP="${NET}$i"
- ping -c 3 -i 0.2 -W 1 $IP &> /dev/null
- if [ $? -eq 0 ] ; then
- echo "Host $IP is up."
- else
- echo "Host $IP is down."
- fi
- let i++
- done
- [root@svr5 ~]# chmod +x chknet.sh
3)测试、验证脚本
- [root@svr5 ~]# ./chknet.sh
- Host 192.168.4.1 is down.
- Host 192.168.4.2 is down.
- Host 192.168.4.3 is down.
- Host 192.168.4.4 is down.
- Host 192.168.4.5 is up.
- .. ..
- Host 192.168.4.250 is down.
- Host 192.168.4.251 is down.
- Host 192.168.4.252 is down.
- Host 192.168.4.253 is down.
- Host 192.168.4.254 is down.
case 变量值 in
模式1)
命令序列1 ;;
模式2)
命令序列2 ;;
.. ..
*)
步骤一:编写脚本文件
脚本编写参考如下:
- [root@svr5 ~]# vim test.sh
- #!/bin/bash
- case $1 in
- redhat)
- echo "fedora";;
- fedora)
- echo "redhat";;
- *) //默认输出脚本用法
- echo "用法: $0 {redhat|fedora}"
- exit 1
- esac
- [root@svr5 ~]# chmod +x test.sh
步骤三:验证、测试脚本
未提供参数,或提供的参数无法识别时,提示正确用法:
- [root@svr5 ~]# ./test.sh
- 用法: ./test.sh {redhat|fedora}
确认可响应redhat控制参数:
- [root@svr5 ~]# ./test.sh redhat
- fedora
确认可响应fedora控制参数:
- [root@svr5 ~]# ./test.sh fedora
- redhat
默认命令序列
Esac
function 函数名 {
命令序列
.. ..
}
函数名() {
命令序列
.. ..
}
1. [root@svr5 ~]# mycd(){ //定义函数
2. > mkdir /test
3. > cd /test
4. > }
5. [root@svr5 ~]# mycd //调用函数
6.
7. [root@svr5 ~]# mycd(){ //定义函数
8. > mkdir $1
9. > cd $1
10. > }
11. [root@svr5 ~]# mycd /abc //调用函数
12. [root@svr5 ~]# mycd /360 //调用函数
调用函数时,将用户提供的两个参数传递给函数处理。
2)根据实现思路编写脚本文件
- [root@svr5 ~]# vim funexpr.sh
- #!/bin/bash
- myexpr() {
- echo "$1 + $2 = $[$1+$2]"
- echo "$1 - $2 = $[$1-$2]"
- echo "$1 * $2 = $[$1*$2]"
- echo "$1 / $2 = $[$1/$2]"
- }
- myexpr $1 $2
- [root@svr5 ~]# chmod +x funexpr.sh
break可以结束整个循环;continue结束本次循环,进入下一次循环;exit结束整个脚本,案例如下:
1. [root@svr5 ~]# cat /root/test.sh
2. #!/bin/bash
3. for i in {1..5}
4. do
5. if [ $i -eq 3 ];then
6. break #这里将break替换为continue,exit分别测试脚本执行效果
7. fi
8. echo $i
9. done
10. echo 程序结束
- 运维之shell篇-----3.循环结构 、 case语句 、 函数及中断控制
- 【shell】结构控制-循环语句
- shell case语句及函数
- shell之循环语句结构
- shell编程控制语句case
- shell控制结构语句
- Shell控制结构--循环控制
- shell中的函数定义及控制语句
- Shell编程(三)---控制结构及函数
- linux shell 流程控制(条件if,循环【for,while】,选择【case】语句实例
- linux shell 流程控制(条件if,循环【for,while】,选择【case】语句实例
- linux shell 流程控制(条件if,循环【for,while】,选择【case】语句实例
- linux shell 流程控制(条件if,循环【for,while】,选择【case】语句实例
- linux shell 流程控制(条件if,循环【for,while】,选择【case】语句实例
- linux shell 流程控制(条件if,循环【for,while】,选择【case】语句实例
- linux shell 流程控制(条件if,循环【for,while】,选择【case】语句实例
- linux shell 流程控制(条件if,循环【for,while】,选择【case】语句实例
- linux shell 流程控制(条件if,循环【for,while】,选择【case】语句实例
- listview多条目加载
- marquee滚动标签
- struts2文件上传和下载
- 【转】解决 Atom 的包管理器——apm 访问速度慢的问题
- 极光推送工具类JpushUtil,无需修改,直接可用
- 运维之shell篇-----3.循环结构 、 case语句 、 函数及中断控制
- 中介者模式
- 前端里移动端到底比pc端多哪些知识,为啥面试时好多公司都问h5
- android中,在activity弹出一个对话框,并不会执行onpause生命周期方法
- LBS隐私保护的一些看法
- rabbitmq配置
- java学习系列2(多线程二)
- java常用类库---日期类的操作实例
- spring常用注解总结