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

 
 文章参考微信公众号:L宝宝聊IT

Shell脚本应用(for、while循环语句和case分支语句)的更多相关文章

  1. 【2017-2-23】C#switch case分支语句,for循环语句

    switch case分支语句 switch(一个变量值) { case 值:要执行的代码段;break; case 值:要执行的代码段;break; … default:代码段;break;(def ...

  2. shell编程之case分支语句

    shell编程之case分支语句 case分支语句和if的多分支语句很相似. if多分支语句一般用在有(区间范围)的地方 :例如:0-100之间. if需要判断多个不同的条件. case的分支语句用在 ...

  3. Shell脚本之七 选择、循环结构

    一.if else if 语法格式 if condition then command1 command2 ... commandN fi 写成一行(适用于终端命令提示符): if [ $(ps -e ...

  4. shell脚本学习之for循环

    1.数字循环 [root@zabbix ~]# for i in {1..10};do echo $(expr $i \* 3);done;36912151821242730 [root@zabbix ...

  5. shell脚本——作业二(循环作业)

    1.通过位置变量创建linux系统账户及密码 $1 是执行脚本的第一个参数,$2 是执行脚本的第二个参数 #!/bin/bash #创建用户与密码 declare -i c=0 if [ -z $1 ...

  6. Shell脚本之:退出循环

    Shell也使用 break 和 continue 来跳出循环. break命令 下面的例子中,脚本进入死循环直至用户输入数字大于5,使用break跳出这个循环. #!/bin/bash while ...

  7. shell脚本之for 列表循环

    作用:对列表进行循环处理 语法: for var in list do commands done 案例: 1.读取列表中的值 2.读取列表中的复杂值 异常案例:未显示出“'”单引号,使语句出现异常 ...

  8. 用shell脚本写一个for循环

    一.输出十遍北京 for((i=1;i<10;i++))> do> echo '北京';> done 二.死循环 for((;;))do#java -jar producer. ...

  9. shell编程基础(二): shell脚本语法之分支语句和循环语句

    一.分支语句 1.条件测试:test [ 命令test或[可以测试一个条件是否成立,如果测试结果为真,则该命令的Exit Status为0,如果测试结果为假,则命令的Exit Status为1(注意与 ...

随机推荐

  1. win32之进程概念

    win32之进程 一丶简介 学习WindowsAPI. 之前.我们必须理解什么是进程. 在windows环境下.进程就是一个运行起来的exe程序 进程提供了数据以及资源. 但是怎么使用不管.而是由线程 ...

  2. kong+konga

    kong+kongau 注意kong1.0与之前版本API发生了很大的改动,所以是不兼容的,kongav0.14.0是匹配kong1.0+的,不兼容1.0之前的.可以根据自己的需求进行选择. kong ...

  3. virtualBox安装centos,并搭建tomcat

    前言 本文没什么难点,只是发现自己记忆不好,特别是搭建tomcat服务的时候,总是需要去重新查阅资料,特此就写这篇博客来加强自己的记忆,同时也给大家以参考: 路漫漫其修远兮,吾将上下而求索! gith ...

  4. Linux 源码安装 FFmpeg

    加班次数频繁,已经快一年没有写博了.由于此次在项目中使用到了 FFmpeg 来处理音视频,顾记录下在 Linux 系统中源码安装 FFmpeg 以便不时之需. 1. 安装 yasm yasm 是一个汇 ...

  5. Python 3 进阶 —— 使用 PyMySQL 操作 MySQL

    PyMySQL 是一个纯 Python 实现的 MySQL 客户端操作库,支持事务.存储过程.批量执行等. PyMySQL 遵循 Python 数据库 API v2.0 规范,并包含了 pure-Py ...

  6. SQL Server新建登录名,实现SQL Server身份验证模式

    一.如果是默认安装,没有选择SQL Server和Windows身份验证模式,需要重新设置. 1.右击服务器,属性,常规项中点选“SQL Server和Windows身份验证模式” 2.点击“确定”按 ...

  7. typeof() 和 GetType()区是什么

    1.typeof(x)中的x,必须是具体的类名.类型名称等,不可以是变量名称. 2.GetType()方法继承自Object,所以C#中任何对象都具有GetType()方法,它的作用和typeof() ...

  8. [PHP]算法-归并排序的PHP实现

    <?php //归并排序 function merge(&$A,$left,$mid,$right,$temp){ //7.左堆起始 $i=$left; //8.右堆起始 $j=$mid ...

  9. Java,第16天,属性与方法;

    public class 类名{ private double 财产 = 0://设一个财产的属性: public void 一个月工资(){ this.财产 +=4500: }//设一个方法增加财产 ...

  10. 【Spring】30、Spring,SpringMVC用法汇总

    SpringMVC的工作原理图: springMVC中的几个组件: 前端控制器(DispatcherServlet):接收请求,响应结果,相当于电脑的CPU. 处理器映射器(HandlerMappin ...