Shell脚本应用(for、while循环语句和case分支语句)
1、for:读取不同的变量值,逐个执行同一组命令,直到取值完毕退出,变量值以空格分隔
语法:
for 变量值 in 取值列表
do
命令序列
done
2、while:重复测试某个条件,成立则执行,进入下一个循环,直到条件不成立为止
语法:
while 【条件测试 】
do
命令
添加更改测试条件语句
done
例:批量添加用户(stu1~stu20)
prefix=“stu”
i=1
while 【 $i -le 20 】
do
useradd ${prefix}$i
echo “123456” | passwd --stdin ${prefix}$i &> /dev/null
let i++
done
while条件为true:代表永远为真,死循环,必须使用exit或break命令才结束循环
必须进行递增,避免死循环:方法:
Let i++ let i=i+1 i=`expr i+1`
3、case:针对变量的不同取值,分别执行不同的命令序列
语法:
case 变量值 in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
……
*)
默认命令序列
esac
取值时,中括号【】,代表任选其一 ,横杠 - ,代表取值范围,竖杠 | ,代表或者
Shell脚本(for、while和case语句的应用示例)
一、for循环语句
1、根据姓名列表批量添加用户
步骤:首先创建一个姓名列表 vim /root/users.txt 然后创建脚本vim uaddfor.sh批量添加用户

授权并执行后查看用户是否已创建
2、根据ip地址列表检查主机状态
步骤:首先创建一个ip地址列表文件 vim /root/padds.txt 然后创建脚本vim chkhosts.sh
授权并执行
二、while循环语句
1、批量添加规律编号的用户
步骤:创建vim uaddwhile.sh脚本
授权并执行后查看用户是否已创建
2、猜价格游戏
步骤:创建脚本vim pricegame.sh
授权并执行
三、case分支语句
1、检查用户输入的字符类型
步骤:创建脚本vim hitkey.sh
授权并执行
2、编写系统服务脚本
步骤:编写脚本 vim myprog
授权并执行
四、实验案例
1、编写getarp.sh脚本文件
(1)通过arping命令发送ARP请求,根据反馈结果记录MAC地址。
(2)将网段地址(如192.168.4.)赋值给变量NADD,作为检测地址的前缀。
(3)使用while循环语句,重复检测目标并记录MAC地址,主机地址从1-254。
脚本如下:
[root@localhost ~]# vi getarp.sh
#!/bin/bash
# 1. 定义网段地址、MAC列表文件
NADD="192.168.4."
FILE="/etc/ethers"
# 2. 发送ARP请求,并记录反馈结果
[ -f $FILE ] && /bin/cp -f $FILE $FILE.old //备份原有文件
HADD=1 //定义起始扫描地址
while [ $HADD -lt 128 ]
do
arping -c 2 -w 1 ${NADD}${HADD} &> /dev/null
if [ $? -eq 0 ] ; then
arp -n | grep ${NADD}${HADD} | awk '{print $1,$3}' >> $FILE
fi
let HADD++
done
[root@localhost ~]# chmod +x getarp.sh
[root@localhost ~]# ./getarp.sh //执行检测程序
[root@localhost ~]# cat /etc/ethers //确认记录结果
192.168.4.12 00:0C:29:C3:F8:51
192.168.4.110 00:50:56:C0:00:01
…… //省略部分内容
2、编写scanhost.sh脚本
(1)有很多方法可以检测一个主机是否开启匿名FTP服务,这里采取以wget下载工具访问FTP根目录的方式,若能够成功列表,则视为匿名FTP已开启,否则视为关闭。
(2)通过awk命令过滤出/etc/ethers文件中的所有IP地址,赋值给变量TARGET。
(3)使用for循环语句,读取TARGET变量中的IP地址,重复探测FTP开启情况。
脚本如下:
[root@localhost ~]# vi scanhost.sh
#!/bin/bash
TARGET=$(awk '{print $1}' /etc/ethers)
echo "以下主机已开放匿名FTP服务:"
for IP in $TARGET
do
wget ftp://$IP/ &> /dev/null
if [ $? -eq 0 ] ; then
echo $IP
rm -rf index.html //删除测试产生的临时文件
fi
done
[root@localhost ~]# chmod +x scanhost.sh
[root@localhost ~]# ./scanhost.sh //执行脚本,确认扫描结果
以下主机已开放匿名FTP服务:
192.168.4.110
192.168.4.129
Shell脚本应用(for、while循环语句和case分支语句)的更多相关文章
- 【2017-2-23】C#switch case分支语句,for循环语句
switch case分支语句 switch(一个变量值) { case 值:要执行的代码段;break; case 值:要执行的代码段;break; … default:代码段;break;(def ...
- shell编程之case分支语句
shell编程之case分支语句 case分支语句和if的多分支语句很相似. if多分支语句一般用在有(区间范围)的地方 :例如:0-100之间. if需要判断多个不同的条件. case的分支语句用在 ...
- Shell脚本之七 选择、循环结构
一.if else if 语法格式 if condition then command1 command2 ... commandN fi 写成一行(适用于终端命令提示符): if [ $(ps -e ...
- shell脚本学习之for循环
1.数字循环 [root@zabbix ~]# for i in {1..10};do echo $(expr $i \* 3);done;36912151821242730 [root@zabbix ...
- shell脚本——作业二(循环作业)
1.通过位置变量创建linux系统账户及密码 $1 是执行脚本的第一个参数,$2 是执行脚本的第二个参数 #!/bin/bash #创建用户与密码 declare -i c=0 if [ -z $1 ...
- Shell脚本之:退出循环
Shell也使用 break 和 continue 来跳出循环. break命令 下面的例子中,脚本进入死循环直至用户输入数字大于5,使用break跳出这个循环. #!/bin/bash while ...
- shell脚本之for 列表循环
作用:对列表进行循环处理 语法: for var in list do commands done 案例: 1.读取列表中的值 2.读取列表中的复杂值 异常案例:未显示出“'”单引号,使语句出现异常 ...
- 用shell脚本写一个for循环
一.输出十遍北京 for((i=1;i<10;i++))> do> echo '北京';> done 二.死循环 for((;;))do#java -jar producer. ...
- shell编程基础(二): shell脚本语法之分支语句和循环语句
一.分支语句 1.条件测试:test [ 命令test或[可以测试一个条件是否成立,如果测试结果为真,则该命令的Exit Status为0,如果测试结果为假,则命令的Exit Status为1(注意与 ...
随机推荐
- 读书笔记(06) - 语法基础 - JavaScript高级程序设计
写在开头 本篇是小红书笔记的第六篇,也许你会奇怪第六篇笔记才写语法基础,笔者是不是穿越了. 答案当然是没有,笔者在此分享自己的阅读心得,不少人翻书都是从头开始,结果永远就只在前几章. 对此,笔者换了随 ...
- Http怎么处理长连接
http协议中有和keep alive特性,这个在http1.1中有, 可以保持浏览器和服务器之间保持着长连接,http本身是无连接的协议, 通过tcp实现数据的传输,处理长连接要注意什么时候数据服务 ...
- visual studio code (vsc)中查看 php 数组的全部元素
在 vsc 调试 php 时,如果数组元素过多,只能查看前面 30个左右的元素,如果需要看更多的元素,可以配置 xDebugSettings 修改项目中的 .vscode/launch.json 文件 ...
- ASP.NET Core 中的 ORM 之 Dapper
目录 Dapper 简介 使用 Dapper 使用 Dapper Contrib 或其他扩展 引入工作单元 Unit of Work 源代码 参考 Dapper 简介 Dapper是.NET的一款轻量 ...
- web模拟终端博客系统
本文由QQ音乐前端团队发表 前段时间做了一个非常有意思的模拟终端的展示页:http://ursb.me/terminal/(没有做移动端适配,请在PC端访问),这个页面非常有意思,它可以作为个人博客系 ...
- 这次聊聊Promise对象
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由前端林子发表于云+社区专栏 Promise是CommonJS提出的一种规范,在ES6中已经原生支持Promise对象,非ES6环境可以 ...
- github总结(2)--怎样在github上面创建新的分支
part I:添加新的分支步骤分解 第一步:git branch 查看当前分支情况 git branch //查看当前分支情况 第二步:git branch 分支名,新建一个自己的分支 git bra ...
- vue-cli+webpack项目,修改项目名称
使用vue-cli+webpack创建的项目,修改文件名称或者更改文件的位置,运营时会报错,是因为npm项目,在安装依赖(node_nodules)时,会记录当前的文件路径,当修改之后就无法正常启动. ...
- Extjs4.2 rest 与webapi数据交互----顺便请教了程序员的路该怎么走
这一章接着上一篇 对于Ext.data.Store 介紹 与总结,以及对以前代码的重构与优化 1.对于更新OnUpdate()函数的修改:先上代码: function OnUpdate(record) ...
- 使用css的类名交集复合选择器 《转》
复合选择器就是两个或多个基本选择器,通过不同方式连接而成的选择器,主要包括“交集”选择器.“并集”选择器.“后代”选择器. 交集选择器 “交集”复合选择器是由两个选择器直接连接构成,其结果是选中二者各 ...