shell之信号

1.捕捉信号(trap 命令)

常用信号  :

ctrl+c (终止进程)  
ctrl +z  (暂停进程)

[root@base1 mnt]# stty   -a      # 列出中断信号与键盘的关系

在这里插入图片描述

2.信号屏蔽

trap  “”  2   # 把2信号置空,即屏蔽信号2
trap  :  2    # 撤销屏蔽

 [root@base1 mnt]# trap " " 2    # 屏蔽信号2,当再次按ctrl+c时不生效
 [root@base1 mnt]# trap :  2     # 取消屏蔽
 [root@base1 mnt]# ^C      #  ctrl+C又重新生效
练习:写一个信号屏蔽的脚本
[root@base1 mnt]# vim siginal_01.sh 
 #!/bin/bash 
 trap "echo 'sorry! I have trapped Ctrl+C' " 2 
 echo "This is a test  script ..." 	  
 count=1
 while [ $count -le 5 ] 
 do 
     echo "Loop hello$count" 
     sleep 2 
     count=$[ $count + 1 ] 
 done 
  echo "This is the end of the script..."

在这里插入图片描述

[root@base1 mnt]# sh siginal_01.sh

在这里插入图片描述

3.捕捉脚本的退出

xargs   # 获取上一条命令结果全部输出到一行
练习:先自动建立文件,然后用ctrl+c全部删除建立的文件
[root@base1 mnt]# vim siginal_02.sh 
 #!/bin/bash 
 trap "find /tmp -path */westos* | xargs rm -fr && exit " 2 
 while true 
 do 
     touch /tmp/westos_$(date +%F-%H:%M:%S) 
     sleep 2 
     ls -l /tmp/westos* 
 done

在这里插入图片描述

[root@base1 mnt]# sh siginal_02.sh

在这里插入图片描述

[root@base1 mnt]# ls /tmp   # 查看到以westos开头的文件全部都被删除
练习:写一个跳板机的脚本,当连接我的主机不是我允许的主机时,设定那个主机跳转到规定界面,干我只允许干的事情,当连接我的主机是我允许连接的主机时,可以任意操作我的电脑
[root@base1 mnt]# vim tiaoban.sh
  #!/bin/bash 
  function trapper() { 
      trap "" INT EXIT TSTP TERM HUP 
  } 
  function main() { 
  while true 
  do   
      trapper 
      clear 
      cat <<menu 
          \033[036m  1 172.25.254.178    \033[0m 
          \033[032m  2 172.25.254.188    \033[0m 
          \033[033m  3 退出              \033[0m 
  menu  
  read -p "please input a letter:" a 
  case  $a in 
  1)   
      echo "login in 172.25.254.178" 
      ssh [email protected] 
      ;; 
  2)   
      echo "login in 172.25.254.188" 
      ssh [email protected] 
      ;; 
  3)   
      exit 0 
      ;; 
  esac 
  done 
  } 
  main 
 [root@base1 profile.d]# cd /etc/profile.d   # 必须切换到此目录里 ,当我的电脑被别人连接时,会自动执行这个目录里的所有脚本
 [root@base1 profile.d]# vim user_check.sh 
  #!/bin/bash 
  [ $UID -ne 0 ]&& sh /mnt/tiaoban.sh

在这里插入图片描述

练习2:编写脚本,使得连接本机失败次数大于三次的主机IP直接加入到本机的黑名单里
[root@base1 mnt]# vim ssh_check.sh 
 #!/bin/bash 
 function fun() { 
     cat /var/log/secure | awk -F " " '{print $6,$11}'  >> /mnt/file 
     sort -n file |  uniq -cd | awk ' {if($1>=3 && $2=="Failed") {print $3}}' >> /mnt/fil    e1   # 截取失败的行和失败的次数 
     cat file1 | while read line 
     do 
       a=$line   # 遍历文件 
         grep $a /etc/hosts.deny >& /dev/null  # 判断遍历出来的内容是否已经存在文件中 
       if [ $? -gt 0 ];then   # 如果不存在,就把遍历出来的内容写入黑名单里 
         echo "sshd:$a" >> /etc/hosts.deny 
       fi 
     done 
 } 
 fun

在这里插入图片描述

先用其他主机错误连接超过3次以上

[root@base1 mnt]# >   /etc/hosts.deny  # 清空黑名单
[root@base1 mnt]# sh ssh_check.sh   # 执行脚本
[root@base1 mnt]# cat  /etc/hosts.deny   # 查看黑名单,成功加入
sshd:172.25.254.188
sshd:172.25.254.78

再次用其他主机去连接,连接不上

猜你喜欢

转载自blog.csdn.net/wzt888_/article/details/86037996
今日推荐