60天shell脚本计划-8/12-渐入佳境

--作者:飞翔的小胖猪

--创建时间:2021年3月3日

--修改时间:2021年3月7日

说明

 每日上传更新一个shell脚本,周期为60天。如有需求的读者可根据自己实际情况选用合适的脚本,也可在评论区留言提出脚本需求,作者会尽快根据需求编写相关脚本对功能进行实现。

 每篇文章包含5个脚本。

总进度:8/12

上一篇脚本链接:https://www.cnblogs.com/Pigs-Will-Fly/p/14450642.html

下一篇脚本链接:https://www.cnblogs.com/Pigs-Will-Fly/p/14497893.html

主要内容

21年3月3日-nmap检测主机通断脚本

************************************************************************************************************************************************************************************************************************************

脚本说明

执行脚本批量检测给定的主机的网络通断情况,使用nmap软件,适合于1000+以上的环境上比较科学,最后生成一个结果日志文件。测试时是直接输出到屏幕上。

文件说明

nmap_check_machine.sh:脚本主体文件

配置文件

依次在配置文件中添加需要检测主机ip地址。

[root@135 36_nmap_check_machine]# cat host_list.txt 
192.168.111.11
192.168.111.12
192.168.111.135
192.168.111.136
192.168.111.124

脚本主体

[root@135 36_nmap_check_machine]# cat nmap_check_machine.sh 
#/bin/bash
nmap_def(){
  nmap -sP --min-hostgroup 1024 --min-parallelism 1024  -iL host_list.txt  -oG   .output.txt &> /dev/null
  sleep 1
  cat .output.txt  | awk '/\<Host\>/{print $2}'|sort -n|awk '{gsub(/^\s+|\s+$/, "");print}' > .ip_out_format_list.txt
  sleep 1
  sort -n host_list.txt > .format_host_list.txt
  #diff host_list.txt  .ip_out_format_list.txt | grep '<' | awk '{print $2}' > .insert_offline.list
  diff .format_host_list.txt  .ip_out_format_list.txt | awk '/</{print $2}' > .insert_offline.list
  if [[ ! -s .insert_offline.list ]];then
    echo "`date` all machine networks are working "
  else
    #echo  -e "\n ---------------------ERROR-------------------------"  >> /var/log/message
    #echo  -e "`date`  The folling machine network is blocked " >> /var/log/message
    #cat .insert_offline.list >> /var/log/message
    #echo  -e "---------------------ERROR-------------------------\n" >> /var/log/message
    echo  -e "\n ---------------------ERROR-------------------------" 
    echo  -e "`date`  The folling machine network is blocked "
    cat .insert_offline.list 
    echo  -e "---------------------ERROR-------------------------\n"
  fi
}

clear_file(){
  rm -rf .format_host_list.txt
  rm -rf .insert_offline.list
  rm -rf .ip_out_format_list.txt
  rm -rf .output.txt
}

main(){
  nmap_def
  echo -e "\e[33m开始清除临时文件.......\e[0m"
  clear_file
}

main

结果

**************************************************************************************************************2021年3月3日脚本结束*****************************************************************************************************************

 

21年3月4日-检测磁盘根目录和内存值脚本

************************************************************************************************************************************************************************************************************************************

脚本说明

每间隔2秒,监控本机内存和硬盘剩余空间,剩余内存小于500M、根分区剩余空间小于1000M时,屏幕输出信息。

文件说明

check_mem_mout.sh:脚本主体文件

脚本主体

[root@135 37_check_mem_mout]# cat check_mem_mout.sh 
#!/bin/bash
 
# 每间隔2秒,监控本机内存和硬盘剩余空间,剩余内存小于500M、根分区剩余空间小于1000M时,屏幕输出信息。

check_resources(){
  while :
  do
    # 提取根分区剩余空间
    disk_size=$(df -P / | awk '/\//{print $4}')
 
    # 提取内存剩余空间
    mem_size=$(free | awk '/Mem/{print $4}')
    # 注意内存和磁盘提取的空间大小都是以 Kb 为单位
    if  [  $disk_size -le 512000 -a $mem_size -le 1024000  ];then
      echo -e "\e[31m主机资源不足\e[0m"
    fi
    echo -e "\e[33m磁盘可用: ${disk_size}KB"
    echo -e "\e[34m内存使用: ${mem_size}kB\e[0m\n"

    sleep 2
  done
}

main(){
  check_resources
}

main

结果

**************************************************************************************************************2021年3月4日脚本结束*****************************************************************************************************************

 

21年3月5日-石头剪刀布脚本

************************************************************************************************************************************************************************************************************************************

脚本说明

石头剪刀布脚本,直到你赢了才会退出,待完善。

文件说明

game_of_scissors_paper_stone.sh:脚本主体文件

脚本主体

[root@135 38_game_of_scissors_paper_stone]# cat game_of_scissors_paper_stone.sh 
#!/bin/bash

start_game(){
  game=(石头 剪刀 布)
  num=$[RANDOM%3]
  computer=${game[$num]}
  # 通过随机数获取计算机的出拳
  # 出拳的可能性保存在一个数组中,game[0],game[1],game[2]分别是 3 中不同的可能
 
  echo "请根据下列提示选择您的出拳手势"
  echo "1.石头"
  echo "2.剪刀"
  echo "3.布"
 
  read -p "请选择 1‐3:" person
  case  $person  in
  1)
    if [ $num -eq 0 ]
    then
      echo "平局"
      elif [ $num -eq 1 ]
      then
        echo "你赢"
    else
      echo "计算机赢"
    fi;;
  2)   
    if [ $num -eq 0 ]
    then
      echo "计算机赢"
      elif [ $num -eq 1 ]
      then
        echo "平局"
    else
      echo "你赢"
    fi;;
  3)
    if [ $num -eq 0 ]
    then
      echo "你赢"
      elif [ $num -eq 1 ]
      then
        echo "计算机赢"
    else
      echo "平局"
    fi;;
  *)
    echo "必须输入 1‐3 的数字"
  esac
}

main(){
  start_game
}

main

结果

执行结果

**************************************************************************************************************2021年3月5日脚本结束*****************************************************************************************************************

 

 

21年3月6日-备份/etc目录文件脚本

************************************************************************************************************************************************************************************************************************************

脚本说明

获取当前的年月日作为/etc/备份文件路径生成/etc/目录文件备份文件,可添加到计划任务中每天定时执行,也可以参看之前的脚本实现值保留7天的文件。

文件说明

forget_mysql_password.sh:脚本主体文件

脚本主体

 

[root@135 39_auto_bak_etc]# cat auto_bak_etc.sh 
#!/bin/bash
bak_etc(){
  bak_dir='/bak_etc'
  echo  -e "\033[33m备份目录为:${bak_dir}"
  mkdir -p ${bak_dir}
  YY=`date +%y`
  MM=`date +%m`
  DD=`date +%d`
  
  bak_file_name=${YY}${MM}${DD}_etc.tar.gz
  tar zcvf ${bak_dir}/${bak_file_name} /etc  &>/dev/null
  if [ -f ${bak_dir}/${bak_file_name} ];then
    echo  -e "\e[32m备份成功,ok!\e[0m"
    echo  -e "\e[34m备份文件为:${bak_dir}/${bak_file_name}\033[0m"
  fi
}


main(){
  bak_etc
}

main

结果

**************************************************************************************************************2021年3月6日脚本结束*****************************************************************************************************************

 

 

21年3月7日-文件大小写转换脚本

************************************************************************************************************************************************************************************************************************************

脚本说明

自定义字符转换脚本,显示当前目录下ls命令结果找出来的字符,小写转换为大写,大写转换为小写,数字不动。

文件说明

upper_lower.sh:脚本主体文件

脚本主体

[root@135 40_toggle_case]# cat upper_lower.sh 
#!/bin/bash
#不支持中文字符,谢谢。
upper_lower(){
  for x in `ls`
  do
    echo -e "\e[31m此时接收到的字符为: \e[34m${x}\e[0m"
    str_len=${#x}
    #echo "输入字符串长度为${#x} "
    for i in `seq 0 $[str_len-1] `
    do
      #echo  "当前位置的字符为${x:$i:1}"
      str_check=${x:$i:1}
      case "${str_check}" in
        [[:lower:]])
          #echo "小写字母"
          echo  -ne "${str_check}"|tr '[a-z]' '[A-Z]'
          ;;
        [[:upper:]])
          #echo "大写字母"
          echo  -ne "${str_check}"|tr '[A-Z]'  '[a-z]'
          ;;  
        *)
          echo -ne "${str_check}"
          ;;
      esac
    done
    echo -e "\n\e[33m转换下一个字符\e[0m\n"
  done
}

main(){
  upper_lower
}

main

结果

执行结果

**************************************************************************************************************2021年3月7日脚本结束*****************************************************************************************************************

 

posted @ 2021-03-07 21:45  飞翔的小胖猪  阅读(112)  评论(0编辑  收藏  举报