工作中常用的shell脚本

日常巡检

#!/bin/bash
echo "系统巡检脚本:Version `date +%F`"

echo -e "\033[33m*******************************************************系统检查 *******************************************************\033[0m"
echo "系统:`uname -a | awk '{print $NF}'`"
echo "发行版本:`cat /etc/redhat-release`"
echo "内核:`uname -r`"
echo "主机名:`hostname`"
echo "SELinux:`/usr/sbin/sestatus | grep 'SELinux status:' | awk '{print $3}'`"
echo "语言/编码:`echo $LANG`"
echo "当前时间:`date +%F_%T`"
echo "最后启动:`who -b | awk '{print $3,$4}'`"
echo "运行时间:`uptime | awk '{print $3}' | sed 's/,//g'`"

echo -e "\033[33m*******************************************************CPU检查 *******************************************************\033[0m"
echo "物理CPU个数: `cat /proc/cpuinfo | grep "physical id" | awk '{print $4}' | sort | uniq | wc -l`"
echo "逻辑CPU个数: `cat /proc/cpuinfo | grep "processor" | awk '{print $3}' | sort | uniq | wc -l`"
echo "每CPU核心数: `cat /proc/cpuinfo | grep "cores" | awk '{print $4}'`"
echo "CPU型号: `cat /proc/cpuinfo | grep "model name" | awk -F":" '{print $2}'`"
echo "CPU架构: `uname -m`"
echo -e "\033[33m*******************************************************内存检查 *******************************************************\033[0m"
echo "总共内存:`free -mh | awk "NR==2"| awk '{print $2}'`"
echo "使用内存:`free -mh | awk "NR==2"| awk '{print $3}'` "
echo "剩余内存: `free -mh | awk "NR==2"| awk '{print $4}'`"
echo -e "\033[33m*******************************************************硬盘检查 *******************************************************\033[0m"
echo "总共磁盘大小:`df -hT | awk '/\/$/' | awk '{print $3}'`"


echo -e "\033[33m*******************************************************网络检查 *******************************************************\033[0m"
echo `ip a | grep eno | awk "NR==2" | awk '{print $NF,":",$2}'`
echo "网关:`ip route | awk 'NR==1'| awk '{print $3}'`"
echo "DNS: `cat /etc/resolv.conf | grep "nameserver" | awk '{print $2}'`"

ping -c 4 www.baidu.com > /dev/null
if [ $? -eq 0 ];then
    echo "网络连接:正常"
else
    echo "网络连接:失败"
fi
echo -e "\033[33m*******************************************************安全检查 *******************************************************\033[0m"
echo "登陆用户信息:`last | grep "still logged in" | awk '{print $1}'| sort | uniq`"
md5sum -c --quiet /md5file/passwd.md5 &> /dev/null  #passwd.md5提前创建好
if [ $? -eq 0 ];then
    echo "文件未被串改"
else
    echo "文件被串改"
fi

分库

#!/bin/bash

#MySQL分库自动备份方案
DB_LIST=$(mysql -uroot -s -e "show databases;" | grep -v "Database")
DB_DIR=msyql_backup_`date +%F`

[ ! -d $DB_DIR ] && mkdir $DB_DIR

for i in $DB_LIST
do
    #mysqldump -uroot --skip-lock-tables -B $i > ${DB_DIR}/${i}.sql
    mysqldump -uroot -B $i > ${DB_DIR}/${i}.sql 2>/dev/null
done

分表

#!/bin/bash

#MySQL分表自动备份方案

DB_LIST=$(mysql -uroot -s -e "show databases;" | grep -v "Database")
DB_DIR=msyql_backup_`date +%F`

[ ! -d $DB_DIR ] && mkdir $DB_DIR

for i in $DB_LIST
do
    for j in `mysql -uroot -s -e "use $i;show tables;" | grep -v Tables_in_mysql`
    do
        mysqldump -uroot  ${i} ${j} > ${DB_DIR}/${i}_${j}.sql 2>/dev/null
        done    
done

done删除文件

#!/bin/bash
while :
do
    read -p "请输入您想要删除的文件:<<" file
    echo "您想要删除的文件是:$file"

​    read -p "确认要删除吗?(Y/N)" cmd1
​   case $cmd1 in
​       Y|y)
​           if [ -e $file ]; then
​               count=$(rpm -qa |grep rsync|wc -l)
​               if [ $count -ne 0 ]; then
​                   echo "rsync 已经安装了"
​               else
​                   yum -y install rsync    
​               fi
​               netstat  -lptnu|grep 873
​               if [ $? -eq 0 ]; then
​                   echo "rsync service 已经运行了"
​               else
​                               systemctl start rsyncd
​               fi



​               #开始备份文件
​               backup_dir="/usr/local/src/backup"
​               [ -d ${backup_dir} ] || mkdir ${backup_dir}
​               #开始执行备份操作:
​               rsync -av /tmp/abc ${backup_dir}
​               echo "input Y:delete!"
​               echo "input y:no delete!"
​               read -p "您是否真的真的要删我?(Y|y):<<" cmd2
​               case $cmd2 in
​                   Y)
​                       echo "start 删除文件:$file"
​                       rm -rf  $file
​                       echo "文件恢复路径:${backup_dir}"
​                       ;;
​                   y)
​                       echo "no delete"
​                       exit
​                       ;;
​               esac
​           else
​               echo "start touch file:$file"
​               touch $file
​               exit
​           fi
​           ;;
​       N|n)
​           echo "不删除$file"
​           exit
​           ;;

查看局网内主机存活

#!/usr/bin/bash
# check host status
#v1
for i in {1..254}
do
        {
    ip=192.168.8.$i
    ping -c 2 -W 1 $ip &>/dev/null
    if [ $? -eq 0 ];then
        echo "$ip is online" | tee -a /tmp/host_online.txt
    else
       # echo "$ip is offline" | tee -a /tmp/host_offline.txt
       echo "$ip is offline" &>/dev/null
    fi
        }&
done
wait

批量自定义创建用户

#!/usr/bin
# create user 
# 功能:自定义用户名前缀和尾部数字,判断 输入的是不是数字和非空的字符集
#
read -p "请输入尾号:" num
while true
do
      if [[ "$num" =~ ^[0-9]+$ ]];then
           break
      else    
           read -p "请再次输入尾号:" num 
      fi
done

read -p "请输入用户名前缀:" prefix
while true
do
   if [ -n "$prefix" ];then
      break
   else
      read -p "请再次输入用户名前缀:" prefix
   fi
done

for i in `seq -w $num`  #-w 等位补全
do
  user=$prefix$i
  useradd $user
  echo "123" | passwd --stdin $user &>/dev/null
  if [ $? -eq 0 ];then
     echo "$user is created"
  fi
done

批量分发公钥

#!/bin/sh


IP=(
 # 10.0.0.7
 # 10.0.0.8
 # 10.0.0.9
  10.0.0.31
  10.0.0.41
  10.0.0.51
)

post=22
passwd=123456
rpm -qa | grep 'sshpass' > /dev/null 2>&1
if [ $? -eq 0 ];then
    echo "sshpass 已经安装"
else
    yum -y install sshpass > /dev/null 2>&1
    wait    
fi

[ ! -e ~/.ssh/id_dsa.pub ] &&  ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa > /dev/null 2>&1



for i in ${IP[*]}
do
echo "==================== 主机 $i 开始分发公钥 ==================== "
sshpass -p$passwd ssh-copy-id -i ~/.ssh/id_dsa.pub root@$i -p $post "-o StrictHostKeyChecking=no" >/dev/null 2>&1

echo  "主机 $i 成功分发公钥"
echo "==================== 主机 $i 分发公钥结束 ==================== "
echo ""

    
done

代码上线

#创建目录
mkdir -p /scripts/jenkins/

#编写脚本
cat > /scripts/jenkins/deploy.sh << 'EOF'
#!/bin/bash

PATH_CODE=/var/lib/jenkins/workspace/h5game/
PATH_WEB=/usr/share/nginx
TIME=$(date +%Y%m%d-%H%M)
IP=10.0.0.7

#打包代码
cd ${PATH_CODE} 
tar zcf /opt/${TIME}-web.tar.gz ./*

#拷贝打包好的代码发送到web服务器代码目录
ssh ${IP} "mkdir ${PATH_WEB}/${TIME}-web -p"
scp /opt/${TIME}-web.tar.gz ${IP}:${PATH_WEB}/${TIME}-web

#web服务器解压代码
ssh ${IP} "cd ${PATH_WEB}/${TIME}-web && tar xf ${TIME}-web.tar.gz && rm -rf ${TIME}-web.tar.gz"
ssh ${IP} "cd ${PATH_WEB} && rm -rf html && ln -s ${TIME}-web html"
EOF

#添加可执行权限
chmod +x /scripts/jenkins/deploy.sh

其他常用脚本参考以下大佬的整理:

其他工作中常用的shell脚本

你可能感兴趣的:(工作中常用的shell脚本)