shell脚本应用(三)

防伪码:长风破浪会有时,直挂云帆济沧海

shell脚本应用(三)

前言:当面对各种列表重复任务时,使用if语句已经难以满足要求,而顺序编写全部代码更是显得异常繁琐,困难重重。使用循环、分支等其他程序控制结构,从而能够轻松完成更加复杂、强大的功能。

1、 使用for循环语句(读取不同的变量值,用来逐个执行同一组命令)

1) 根据姓名列表批量添加用户

准备员工列表文件users.txt,然后编写一个名为uaddfor.sh的脚本,从users.txt文件中读取各用户名称,重复执行添加用户,设置初始密码的相关操作。

Vi  /root/users.txt

Vi  uaddfor.sh

执行脚本:./uaddfor.sh之后查看用户文件cat  /etc/passwd

2)若要删除uaddfor.sh脚本添加的用户,只需要将上面脚本中添加用户的命令改为删除的即可。

Vi  udelfor.sh

执行脚本之后发现用户已经删除

3)根据ip地址列表查看主机状态

首先建立ip地址列表文件ipadds.txt,然后编写一个名为chkhosts.sh的shell脚本,从ipadds.txt文件中读取各服务器的ip地址,

重复执行ping连通性测试,并根据测试结果输出相应的提示信息。

Vi  /root/ipadds.txt

编写脚本vi chkhosts.sh

执行脚本

2、 使用while循环语句(重复测试某个条件,只要条件成立则反复执行。For循环适合无规律,列表已固定,while循环适合要求循环次数,操作对象按数字顺序编号,按特定条件执行重复操作的情况。)

1) 批量添加规律编号的用户,添加20个用户,名称依次为stu1,stu2,... Stu20

Vi  uaddwhile.sh

循环条件:序号<=20

let ++:序号递增,避免死循环

执行脚本之后查看用户:cat /etc/passwd

2)删除所添加的用户,只需将上述代码修改即可

Vi  udelwhile.sh

执行脚本之后查看用户是否被删除

3) 猜价格游戏

思路:通过环境变量RANDOM可获得一个小于2的16次方的随机整数,计算其与1000的余数即可获得0-999的随机价格,反复猜测操作可以通过以true作为测试条件的while循环实现,当用户猜中实际价格时终止循环,判断猜测价格与实际价格的过程采用if语句实现,嵌套在while循环体内,使用变量来记录猜测次数。

Vi  pricegame.sh

Chmod  +x  pricegame.sh

./pricegame.sh执行脚本

3、 使用case分支语句(针对变量的不同取值,分别执行不同的命令序列 

Case语句可以使用脚本程序的结构更加清晰。

1) 检查用户输入一个字符,通过case语句判断该字符是否为字母,数组或其他控制字符,并给出相应的提示信息。

Vi  hitkey.sh

执行脚本的效果:

1) 编写系统服务脚本

通过位置变量$1指定的start,stop,restart,status控制参数,分别用来启动、停止、重启sleep进程,以及查看sleep进程的状态。

Vi  myprog

测试并确认myprog脚本的执行结果如下:

然后执行下面的命令添加myprog为系统服务

上机实验部分:

实验案例:shell脚本应用实战

1、编写getarp.sh脚本文件

(1)通过arping命令发送ARP请求,根据反馈结果记录MAC地址。

(2)将网段地址(如192.168.4.)赋值给变量NADD,作为检测地址的前缀。

(3)使用while循环语句,重复检测目标并记录MAC地址,主机地址从1-254。

我们使用桥接网络获取到0.102和0.103地址,并做测试

1、定义网段地址、MAC列表文件、发送ARP请求,并记录反馈结果(如果网段发生变化,只需修改MADD=“192.168.x.”)

执行脚本之后查看/etc/ethers文件

chmod +x getarp

./getarp

Cat  /etc/ethers

2、编写scanhost.sh脚本

(1)有很多方法可以检测一个主机是否开启匿名FTP服务,这里采取以wget下载工具访问FTP根目录的方式,若能够成功列表,则视为匿名FTP已开启,否则视为关闭。

(2)通过awk命令过滤出/etc/ethers文件中的所有IP地址,赋值给变量TARGET。

(3)使用for循环语句,读取TARGET变量中的IP地址,重复探测FTP开启情况。

执行脚本之前在另一台linux服务器B192.168.1.2上搭建ftp服务(使用vsftpd软件),然后在linuxA上执行脚本

在B上安装vsftpd,如下图所示:

Vim /etc/vsftpd/vsftpd.conf启用匿名,默认就启用了,我们查看一下:

开启ftp服务

Service  vsftpd  start

在A上登录ftp 192.168.1.2测试,如果不能使用ftp命令,则需要安装ftp-0.17......

最后在A上执行脚本./scanhost.sh

执行脚本之后发现192.168.1.2开启了ftp匿名登录。

谢谢观看,希望能真心的帮到您!

时间: 2024-12-25 08:13:46

shell脚本应用(三)的相关文章

shell脚本(三)

shell脚本(三) 2.文件排序.合并和分割 (1)sort命令 #-c:测试文件是否已经排序:-k:指定排序域:-m:合并两个已经排序的文件: #-n:根据数字大小进行排序:-o:将输出写到文件:-r:将排序结果逆向显示 #-t:改变域分隔符:-u:去除结果中的重复行 #将a.txt逆向排序,并去除重复的行 sort -u -r a.txt #以":"为分隔符,根据第3域数字大小来对/etc/passwd排序 sort -t: -k3n /etc/passwd #合并已经排序的两个

shell脚本第三篇——监控主机的磁盘空间,当使用空间超过90%就通过发mail来发警告

shell脚本第三篇--监控主机的磁盘空间,当使用空间超过90%就通过发mail来发警告 #!/bin/bash#monitor available disk space#提取本服务器的IP地址信息 IP=`ifconfig eth0 | grep "inet addr" | cut -f 2 -d ":" | cut -f 1 -d " "` SPACE=` df -hP | awk '{print int($5)}'`if [ $SPACE

Shell脚本的三种执行方式

Shell脚本的执行方式可以有以下几种: 方式一:  ./script.sh # 利用小数点来执行 方式二:  sh script.sh 或 bash script.sh # 利用bash(sh)来执行脚本 前面两种方式其实都是一样的:都是在当前父进程下的子进程中执行,子进程完成后,子进程中的各项变量或操作将会结束而不会传回到父进程中.举例来说: 可以看到,执行后再看脚本中两个变量,在父进程中不起作用! 备注: 如果在script2.sh文件里面执行script1.sh的脚本,那么就是执行.  

Shell 脚本中调用另一个 Shell 脚本的三种方式

主要以下有几种方式: Command Explanation fork 新开一个子 Shell 执行,子 Shell 可以从父 Shell 继承环境变量,但是子 Shell 中的环境变量不会带回给父 Shell. exec 在同一个 Shell 内执行,但是父脚本中 exec 行之后的内容就不会再执行了 source 在同一个 Shell 中执行,在被调用的脚本中声明的变量和环境变量, 都可以在主脚本中进行获取和使用,相当于合并两个脚本在执行.   第一种:fork 特点:会生成子PID而且可重

第 三 十 一 天:shell 脚本 (三)

小Q :你可以从别人那里得到思想,你的思想方法,即熔铸思想的模子必须是 你自己的.                                   ----拉姆 就像我以前说的,因为有c等编程语言作基础,学起shell来感觉会很轻松,我都不知道要 怎么记笔记了,感觉还是那些知识,记得太详细的话,知识点太多,不过太零散,就大致 记了一下: 就像我们老师说的:关于编程,我不要求你什么语句都懂,我给你要求,你只要给我画出他 的流程图就行.是啊,其实编程为什么注重多看多写,就是要你遇到问题可以在你脑

shell脚本的三种执行方法

1.bash 脚本或者sh 脚本 2../脚本 3.. 脚本或者source 脚本 说明.或者source是内建命令 第一种方法是脚本没有执行权限的时候使用 第二种方法是当前路径下执行脚本但必须有可以行权限 第三种方法在当前进程运行即父进程下运行,而前两种方法在父进程下创建子进程运行脚本 举个小例子表示区别: 因为前两种执行脚本方法是在当前父进程下创建子进程执行shel脚本,定义的内容不会返回到父进程,而第三种方法是在父进程下直接执行脚本,可以返回定义的内容. vim /etc/init.d/c

快速入门shell脚本编写(三)

从这一节主要学习 控制语句.循环语句 注释.shell多行注释 shell单行注释很简单,只需在每行行首增加#,但是他其实是没有提供专门的多行注释的方法的,所以我们采用投巧的方式来多行注释,用EOF分界符来多行注释,如下: 1 #! /bin/sh 2 3 file="/Desktop/file.test" 4 5 <<EOF 6 if [ -r $file ] 7 then 8 echo "1" 9 fi 10 11 if [ -w $file ] 1

shell脚本笔记三:while循环 until循环

while CONDITION;do statment done until CONDITION;do statment done 练习: 写一个脚本:每隔五秒钟就看下jt有没有登陆,没有登陆则继续执行,登陆了则停止命令

shell脚本学习(三)

shell echo命令 显示普通字符串: echo "I am cat_crazy.'" 注:这里的双引号可以省略 显示转义字符: 如果要输出引号,*号等需要转义才能输出,如下 echo \"我是cat_crazy\" 输出结果是 "我是cat_crazy" 注:引号需要转义才能输出 显示变量: name="cat_crazy" echo $name 显示换行: echo -e "Hello \n" #-

shell脚本(三)while循环语句

理论部分: 循环的意思就是让程序重复地执行某些语句; whiler循环就是循环结构的一种,当事先不知道循环该执行多少次,就要用到while循环; while循环语句的运行过程 使用while循环语句时,可以根据特定的条件反复执行一个命令,直到条件不满足为止; while会出现死循环的过程,因此循环体内的命令序列内应包括修改测试条件的语句 while语句的语法结构: 注意: 使用while循环语句时,有两个特殊的条件测试操作即true(真)和false(假); 使用true时表示条件永远成立,循环