shell 脚本编程之信号捕捉和主机探测

shell 脚本编程之信号捕捉和主机探测

===============================================================================

概述:

===============================================================================

主机探测

1.写一个脚本,探测192.168.0.0网段中主机在线状态

[[email protected] bin]# cat ping.sh 
#!/bin/bash
#authoe:tao
#describtion:给定一个网络地址,并探测此网络中主机的在线状态,并统计出在线主机和离线主机的个数

read -p "请输入您的IP地址: " IP

declare -i i=0
declare -i j=0

address=$(echo $IP |egrep "(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])")
arg3=$(echo $IP |cut -d. -f1-3).

if [[ -z "$IP" ]];then
	echo "At least one IPv4." && exit 1
elif [[ "$IP" == "$address" ]];then
	for arg4 in $(seq 100 110);do
		if ping -c1 -W1 $arg3$arg4 &> /dev/null ;then
			echo -e "$arg3$arg4\tup."
			let i++
		else
			echo -e "$arg3$arg4\tdown."
			let j++
		fi
	done
else
	echo "您输入的格式不正确,请重新输入!" && exit 2
fi

echo "在线主机的个数为:$i"
echo "不在线主机的个数为:$j"

#==================================================================================
[[email protected] bin]# bash ping.sh 
请输入您的IP地址: 
At least one IPv4.

[[email protected] bin]# bash ping.sh 
请输入您的IP地址: 192.168.1
您输入的格式不正确,请重新输入!

[[email protected] bin]# bash ping.sh 
请输入您的IP地址: 192.168.1.0
192.168.1.100	up.
192.168.1.101	up.
192.168.1.102	up.
192.168.1.103	down.
192.168.1.104	down.
192.168.1.105	down.
192.168.1.106	up.
192.168.1.107	down.
192.168.1.108	down.
192.168.1.109	down.
192.168.1.110	down.
在线主机的个数为:4
不在线主机的个数为:7

2.写一个脚本探测 A类,B类,C类网络中主机的在线状态

# 如下定义的A,B,C三类网络探测的函数脚本,可以按需调用函数执行即可
[[email protected] function]# cat hostping.sh 
#!/bin/bash
#

cping() {
	local i=1
	while [ $i -le 5 ];do
		if ping -c1 -W1 $1.$i &> /dev/null; then
			echo "$1.$i is up."
		else
			echo "$1.$i is down."
		fi
		let i++
	done
}

bping() {
	local j=0
	while [ $j -le 5 ];do
		cping $1.$j
		let j++
	done
}

aping() {
	local k=0
	while [ $k -le 5 ];do
		bping $1.$k
		let k++
	done
}

aping 10
bping 172.16
cping 192.168.1

信号捕捉

 1.定义和功能:

★列出信号:

  • trap -l
  • kill -l

获取帮助:

  • man 7 single

每个信号有三种表示方式:

  • 信号的数字标识;如 1
  • 信号的完整名称;如 SIGHUB
  • 信号的简写名称;如 HUB

常用的信号:

  • SIGHUP,1:无须重新启动进程而让其重读配置文件,并生效;
  • SIGINT,2:打断正在运行的进程;相当于Ctrl+c;
  • SIGKILL,9:强行终止(杀死)正在运行的进程;
  • SIGTERM,15:安全终止正在运行的进程;
  • SIGCONT,18:继续运行指定的进程;
  • SIGSTOP,19:暂停进程;

★trap命令用法:

语法:

  • trap ‘COMMAND‘ SINGLE

常用来捕捉的信号:

  • HUB ,INT

演示:

1.列出所有信号

[[email protected] function]# kill -l
 1) SIGHUP	 2) SIGINT	 3) SIGQUIT	 4) SIGILL	 5) SIGTRAP
 6) SIGABRT	 7) SIGBUS	 8) SIGFPE	 9) SIGKILL	10) SIGUSR1
11) SIGSEGV	12) SIGUSR2	13) SIGPIPE	14) SIGALRM	15) SIGTERM
16) SIGSTKFLT	17) SIGCHLD	18) SIGCONT	19) SIGSTOP	20) SIGTSTP
21) SIGTTIN	22) SIGTTOU	23) SIGURG	24) SIGXCPU	25) SIGXFSZ
26) SIGVTALRM	27) SIGPROF	28) SIGWINCH	29) SIGIO	30) SIGPWR
31) SIGSYS	34) SIGRTMIN	35) SIGRTMIN+1	36) SIGRTMIN+2	37) SIGRTMIN+3
38) SIGRTMIN+4	39) SIGRTMIN+5	40) SIGRTMIN+6	41) SIGRTMIN+7	42) SIGRTMIN+8
43) SIGRTMIN+9	44) SIGRTMIN+10	45) SIGRTMIN+11	46) SIGRTMIN+12	47) SIGRTMIN+13
48) SIGRTMIN+14	49) SIGRTMIN+15	50) SIGRTMAX-14	51) SIGRTMAX-13	52) SIGRTMAX-12
53) SIGRTMAX-11	54) SIGRTMAX-10	55) SIGRTMAX-9	56) SIGRTMAX-8	57) SIGRTMAX-7
58) SIGRTMAX-6	59) SIGRTMAX-5	60) SIGRTMAX-4	61) SIGRTMAX-3	62) SIGRTMAX-2
63) SIGRTMAX-1	64) SIGRTMAX
[[email protected] function]# trap -l
 1) SIGHUP	 2) SIGINT	 3) SIGQUIT	 4) SIGILL	 5) SIGTRAP
 6) SIGABRT	 7) SIGBUS	 8) SIGFPE	 9) SIGKILL	10) SIGUSR1
11) SIGSEGV	12) SIGUSR2	13) SIGPIPE	14) SIGALRM	15) SIGTERM
16) SIGSTKFLT	17) SIGCHLD	18) SIGCONT	19) SIGSTOP	20) SIGTSTP
21) SIGTTIN	22) SIGTTOU	23) SIGURG	24) SIGXCPU	25) SIGXFSZ
26) SIGVTALRM	27) SIGPROF	28) SIGWINCH	29) SIGIO	30) SIGPWR
31) SIGSYS	34) SIGRTMIN	35) SIGRTMIN+1	36) SIGRTMIN+2	37) SIGRTMIN+3
38) SIGRTMIN+4	39) SIGRTMIN+5	40) SIGRTMIN+6	41) SIGRTMIN+7	42) SIGRTMIN+8
43) SIGRTMIN+9	44) SIGRTMIN+10	45) SIGRTMIN+11	46) SIGRTMIN+12	47) SIGRTMIN+13
48) SIGRTMIN+14	49) SIGRTMIN+15	50) SIGRTMAX-14	51) SIGRTMAX-13	52) SIGRTMAX-12
53) SIGRTMAX-11	54) SIGRTMAX-10	55) SIGRTMAX-9	56) SIGRTMAX-8	57) SIGRTMAX-7
58) SIGRTMAX-6	59) SIGRTMAX-5	60) SIGRTMAX-4	61) SIGRTMAX-3	62) SIGRTMAX-2
63) SIGRTMAX-1	64) SIGRTMAX	

2.trap 命令 在接受到 INT信号时,就会执行定义的命令和参数

[[email protected] bin]# cat trap.sh
#!/bin/bash
#

trap ‘echo "逗你玩!!!"‘ INT

for i in {100..250};do
	ping -c1 -W1 192.168.1.$i
done 

# 执行结果如下:即每次执行 Ctrl+c 都会发送INT 信号,所以都会显示信息,
PING 192.168.1.247 (192.168.1.247) 56(84) bytes of data.
^C
--- 192.168.1.247 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms

逗你玩!!!
PING 192.168.1.248 (192.168.1.248) 56(84) bytes of data.
^C
--- 192.168.1.248 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms

逗你玩!!!

#=========================================================================
# 为了不使如上的循环一直执行下去,我们可以传送 exit 命令,即脚本只要已收到INT信号就执行 Quit 并退出
[[email protected] bin]# cat trap.sh
#!/bin/bash
#

trap ‘echo "Quit";exit 1‘ INT

for i in {100..250};do
	ping -c1 -W1 192.168.1.$i
done

3.在接收到INT信号时,因为命令还没有结束,但是又想把命令产生的文件删除,则可以定义一个函数,在使用 trap 命令时直接调用函数即可,示例如下:

[[email protected] bin]# cat trap.sh 
#!/bin/bash
#

mytrp() {
	echo "Quit"
	rm -f ${hostmpfiles[*]}
	exit 1
}

declare -a hosmpfiles

trap ‘mytrp‘ INT

for i in {100..250};do
	tmpfile=$(mktemp /tmp/ping.XXXXXX)
	if ping -c1 -W1 192.168.1.$i &> /dev/null; then
		echo "192.168.1.$i is up" |tee $tmpfile
	else
		echo "192.168.1.$i is down" |tee $tmpfile
	fi
	hostmpfiles[${#hostmpfiles[*]}]=$tmpfile
done

rm -f ${hostmpfiles[*]}
时间: 2024-10-10 00:17:18

shell 脚本编程之信号捕捉和主机探测的相关文章

Linux01-BASH脚本编程之信号捕捉及任务计划53

一.脚本编程知识点 1.获取变量中字符的长度:${#VARNAME} 2.变量赋值: a)${parameter:-word}:如果parameter为空或未定义,则变量展开为"word":否则,展开为parameter的值: 如:A=3 echo ${A:-30} unset A echo ${A:-30} b)${parameter:+word}:如果parameter为空或未定义,不做任何操作:否则,则展开为"word"值: 如:echo ${A:+30} A

shell脚本编程进阶练习题

这两天学习了shell脚本编程进阶,作为一枚文科生,小编觉得...恩..脚本很烧脑.....,不过小编还是做了些题,稍作总结后,呈给各位看官,内容如下: 一.条件选择if语句 选择执行: 注意:if语句可嵌套 单分支 if 判断条件;then 条件为真的分支代码 fi 双分支 if 判断条件; then 条件为真的分支代码 else 条件为假的分支代码 fi 多分支 if 判断条件1; then 条件为真的分支代码 elif 判断条件2; then 条件为真的分支代码 elif 判断条件3; t

Shell脚本编程知识点总结及范例

 一:关于语言 1)编译性语言 编译型语言多半运作于底层,所处理的是字节.整数.浮点数或其它及其机器层经的对象.处理过程为:源程序--预处理--编译--汇编--链接,编译性语言为静态语言. 2)解释性语言 解释性语言读入程序代码并将其转化为内部的形式加以执行.处理过程:解释性(文本文件)-解释器去读取并执行.解释性语言为动态语言. 二:基础 变量类型 linux脚本中的变量不需要事先声明,而是直接定义使用(这点不同于其他高级编程语言中变量的使用)bash变量类型分为本地变量和环境变量. 本地变量

《Linux命令行与Shell脚本编程大全第2版.布卢姆》pdf

下载地址:网盘下载 内容简介  · · · · · · 本书是一本关于Linux 命令行与shell 脚本编程的全面教程.全书分为四部分:第一部分介绍Linuxshell 命令行:第二部分介绍shell 脚本编程基础:第三部分深入探讨shell 脚本编程的高级内容:第四部分介绍如何在现实环境中使用shell 脚本.本书不仅涵盖了详尽的动手教程和现实世界中的实用信息,还提供了与所学内容相关的参考信息和背景资料. 本书内容全面,语言简练,示例丰富,适合于linux 系统管理员及Linux 爱好者阅读

SHELL脚本编程的常识和VI常用技巧

来源:http://mprc.pku.edu.cn/mentors/training/TrainingCourses/material/ShellProgramming.HTM#_Toc37518085 Shell脚本编程的常识... 3 七种文件类型... 3 正则表达式... 3 字符类描述... 4 shell的引号类型... 4 变量设置时的不同模式:... 4 条件测试... 5 命令执行顺序... 6 脚本调试... 6 一些常用的小trick.. 6 打印一些头信息... 6 创建

Shell脚本编程的常识

Shell脚本编程的常识 (这些往往是经常用到,但是各种网络上的材料都语焉不详的东西,个人认为比较有用) 七种文件类型 d            目录                                                       l             符号链接 s             套接字文件                                           b            块设备文件 c            字符设备文件 

shell脚本编程高级篇

SHELL脚本编程进阶循环执行:简单来说就是把一些指令重复循环. 循环代码具体的指令有三种: for , while , until其中for, while用的最多.for循环 for 变量名 in 列表;do 循环体 done 关键字的帮助都是用help来查询.for循环语法:在shell编程中 for,in,do,done.这些都是他的关键字,其中循环的指零就放在do和done之间.WORDS决定了循环次数.循环的次数由in 后面跟的WORDS(字符串)的数量决定.字符串的个数决定了do和d

shell脚本编程之基础篇(二)

shell脚本编程之基础篇(二) ============================================================================== 概述: ============================================================================== 退出状态 ★进程使用退出状态来报告成功或失败 ◆0 代表成功,1-255代表失败 ◆$? 变量保存最近的命令退出状态 (查看:echo $?)

Linux系统shell脚本编程——生产实战案例

Linux系统shell脚本编程--生产实战案例     在日常的生产环境中,可能会遇到需要批量检查内网目前在线的主机IP地址有哪些,还可能需要检查这些在线的主机哪些端口是开放状态,因此依靠手工来检查是可以实现,但比较费时费力,所以需要结合shell脚本来实现批量检查的功能,那么今天就来做个小小的实验. 1.开发脚本前准备 一般大家都知道,测试主机是否在线,常用的命令无非就是ping.nmap,因此,首先找一个地址来测试下ping命令的效果 [[email protected] scripts]