shell企业级实用基础脚本(汇总1/2)

1、企业实用脚本1

(生产实用案例)监控MySQL主从同步是否异常,如果异常,则发送短信或者邮件给管理员。提示:如果没主从同步环境,可以用下面文本放到文件里读取来模拟

阶段1:开发一个守护进程脚本每30秒实现检测一次。

阶段2:如果同步出现如下错误号(1158,1159,1008,1007,1062),则跳过错误。

阶段3:请使用数组技术实现上述脚本(获取主从判断及错误号部分)

[[email protected] shell]# mysql -uroot -pli123456 -S /data/3308/mysql.sock
mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 172.16.2.10
                  Master_User: rep
                  Master_Port: 3307
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000004
          Read_Master_Log_Pos: 188
               Relay_Log_File: relay-bin.000008
                Relay_Log_Pos: 253
        Relay_Master_Log_File: mysql-bin.000004
             Slave_IO_Running: Yes
            Slave_SQL_Running: No
              Replicate_Do_DB: 
          Replicate_Ignore_DB: mysql
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 1007
                   Last_Error: Error ‘Can‘t create database ‘zzz‘;
                   database exists‘ on query. Default database: ‘zzz‘
                   Query: ‘create database zzz‘
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 107
              Relay_Log_Space: 2171
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: NULL
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 1007
               Last_SQL_Error: Error ‘Can‘t create database ‘zzz‘;
               database exists‘ on query. Default database: ‘zzz‘.
               Query: ‘create database zzz‘
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 2
#!/bin/sh
array=( 0 1158 1159 1008 1007 1062)
Port=3308
password=li123456
check_slave(){
      master=`mysql -uroot -p$password -S /data/$Port/mysql.sock  -e "show slave status\G;"|awk -F ‘[ :]+‘ ‘NR==3 {print $3}‘`
      io=`mysql -uroot -p$password -S /data/$Port/mysql.sock  -e "show slave status\G;"|awk -F ‘[ :]+‘ ‘NR==12 {print $3}‘`
      sql=`mysql -uroot -p$password -S /data/$Port/mysql.sock  -e "show slave status\G;"|awk -F ‘[ :]+‘ ‘NR==13 {print $3}‘`
      errorno=`mysql -uroot -p$password -S /data/$Port/mysql.sock  -e "show slave status\G;"|awk -F ‘[ :]+‘ ‘NR==20 {print $3}‘`
      second=`mysql -uroot -p$password -S /data/$Port/mysql.sock  -e "show slave status\G;"|awk -F ‘[ :]+‘ ‘NR==34 {print $3}‘`
      for((i=0;i<${#array[@]};i++))
         do
            [ "$errorno" = "${array[$i]}" ]&&no=1
         done
      [ $no -ne 1 ]&&echo "$master error:$errorno"&&exit 100
         if [ "$io" = "Yes" -a "$sql" = "Yes" -a "$second" = "0" ];then
               echo "$master slave ok."
            else
               echo "$master slave error,please check."
         fi
}
main(){
       while true
       do
           check_slave
           sleep 30
       done
}
main

企业实用脚本2

使用for循环在/oldboy目录下通过随机小写10个字母加固定字符串oldboy批量创建10个html文件

#!/bin/sh
[ -f /etc/init.d/functions ]&& . /etc/init.d/functions
mkdir -p /oldboy
for((i=1;i<=10;i++))
do
    A=`head -c 500 /dev/urandom | tr -dc a-z | head -c 10`
    touch /oldboy/${A}_oldboy.html
    [ $? -eq 0 ]&& action "/oldboy/${A}_oldboy.html" /bin/true
done

企业实用脚本3

将以上文件名中的oldboy全部改成oldgirl(用for循环实现),并且html改成大写

方法一:

#!/bin/bash
cd /oldboy/
array=(`ls`)
for i in ${array[*]}
  do
     rename oldboy oldgirl $i
     rename html HTML $i
  done

方法二:

#!/bin/bash
cd /oldboy/
array=(`ls`)
for i in ${array[*]}
  do
     echo $i|awk -F ‘[_]‘ ‘{print "mv",$1"_"$2,$1"_oldgirl.HTML"}‘|bash
  done

方法三:

#!/bin/bash
cd /oldboy/
ls>test.txt
exec < test.txt
while read line
  do
     rename  oldbirl oldboy $line
     line=`rename oldbirl oldboy $line`
     rename HTML html $line
  done

企业实用脚本4

批量创建10个系统帐号oldboy01-oldboy10并设置密码(密码为随机8位字符串)

方法一

#!/bin/bash
for i in `seq -w 10`
do
  echo $i|awk ‘{print "useradd oldboy"$0 " && echo `echo $RANDOM|md5sum|cut -c 1-8`|tee -a pass.txt|passwd --stdin oldboy" $0 }‘|bash
done

方法二

#!/bin/bash
for i in `seq -w 10`
do
   echo oldboy$i|xargs -n1 useradd && echo oldboy$i":"`echo $RANDOM|md5sum|cut -c 1-8`|xargs -n1|tee -a aa.txt|chpasswd
done

企业实用脚本5

写一个脚本,实现判断10.0.0.0/24网络里,当前在线用户的IP有哪些(方法有很多)

#!/bin/bash
[ -f /etc/init.d/functions ]&& . /etc/init.d/functions
trap "echo "cancle...";exit" 2
check_ip(){
         ping -w 1 -c 1 10.0.0.$i>/dev/null
         return $?
}
for i in {1..254}
    do
    {
         action "10.0.0.$i" check_ip
    }&
    done

企业实用脚本6

写一个脚本解决DOS攻击生产案例

提示:根据web日志或者或者网络连接数,监控当某个IP并发连接数或者短时内PV达到100,即调用防火墙命令封掉对应的IP,监控频率每隔3分钟。防火墙命令为:iptables -I INPUT -s 10.0.1.10 -j DROP

#!/bin/bash
check_ddos(){
netstat -antu|grep ESTABLISHED|awk -F ‘[ :]+‘ ‘{print $6}‘|sort|uniq -c > ESTABLISHED.log
[ $? -eq 0 ]&&exec < ESTABLISHED.log||exit 1
while read line
  do
    pv=`echo $line|awk ‘{print $1}‘`
    ip=`echo $line|awk ‘{print $2}‘`
    if  [ $pv -gt 100 ]&&[ `/etc/init.d/iptables -L -n|grep $ip|wc -l` -gt 0 ];then
        iptables -I INPUT -s $ip -j DROP
    fi
  done
}

main(){
   while true
   do
       check_ddos
       sleep 3m
   done
}

main

企业实用题7

开发mysql多实例启动脚本:

已知mysql多实例启动命令为:mysqld_safe--defaults-file=/data/3306/my.cnf &

停止命令为:mysqladmin -u root -poldboy123 -S /data/3306/mysql.sockshutdown

要求:用函数,case语句、if语句等实现。

#!/bin/sh
[ -f /etc/init.d/functions ]&& . /etc/init.d/functions
user=root
password=li123456
CMDpath=/application/mysql/bin
USAGE(){
  echo -e "USAGE:$0 {port:3306|3307|3308...} {start|stop}"
  exit 1
}
function_start_mysql(){
 if [ `lsof -i:$1|wc -l` -eq 0 ];then
    $CMDpath/mysqld_safe --defaults-file=/data/$1/my.cnf &
    action "mysql $1 start success..." /bin/true
 else
    echo "mysql $1 is running..."
 fi
}
function_stop_mysql(){
  if [ `lsof -i:$1|wc -l` -eq 0 ];then
     echo "mysql $1 is not running..."
  else
     $CMDpath/mysqladmin -u $user -p$password -S /data/$1/mysql.sock shutdown
     action "mysql $1 stop..." /bin/true
  fi
}
 case "$2" in
  start)
   function_start_mysql $1 $2
   ;;
  stop)
   function_stop_mysql $1 $2
   ;;
  *)
    USAGE
   ;;
 esac

企业实用题8

如何实现对MySQL数据库进行分库备份,请用脚本实现

#!/bin/sh
USER=root
PASSWD=li123456
SOCKET=/data/3306/mysql.sock
LOGIN="mysql -u$USER -p$PASSWD -S $SOCKET"
DUMP="mysqldump -u$USER -p$PASSWD -S $SOCKET"
DATABASE=$($LOGIN -e "show databases;"|grep -Ev "_schema|mysql|test"|sed ‘1d‘)
for database in $DATABASE
do
  $DUMP $database -R -F --master-data=2 --events|gzip > /server/backup/$database/${database}_${table}_$(date +%F).sql.gz
done
done

企业实用题9

如何实现对MySQL数据库进行分库加分表备份,请用脚本实现

#!/bin/sh
USER=root
PASSWD=li123456
SOCKET=/data/3306/mysql.sock
LOGIN="mysql -u$USER -p$PASSWD -S $SOCKET"
DUMP="mysqldump -u$USER -p$PASSWD -S $SOCKET"
DATABASE=$($LOGIN -e "show databases;"|grep -Ev "_schema|mysql|test"|sed ‘1d‘)
for database in $DATABASE
do
  TABLE=$($LOGIN -e "use $database;show tables;"|sed ‘1d‘)
  for table in $TABLE
do
  [ ! -d /server/backup/$database ] && mkdir -p /server/backup/$database
  $DUMP $database $table|gzip > /server/backup/$database/${database}_${table}_$(date +%F).sql.gz
done
done

企业实用脚本10

bash for循环打印下面这句话中字母数不大于6的单词(昆仑万维实用脚本)。

I am oldboy teacher welcome to oldboy training class.

方法一:

#!/bin/bash
word="I am oldboy teacher welcome to oldboy training class"
echo $word|sed ‘s# #\n#g‘> a.log
exec < a.log
while read line
do
   [ `echo $line|wc -c` -le 7 ]&&echo $line
done

企业实用脚本11

开发shell脚本分别实现以脚本传参以及read读入的方式比较2个整数大小。以屏幕输出的方式提醒用户比较结果。注意:一共是开发2个脚本。当用脚本传参以及read读入的方式需要对变量是否为数字、并且传参个数做判断

方法一:

#!/bin/bash
usage(){
   echo "usage:$0 int1 int2"
   exit 1
}
compare(){
     [ $1 -gt $2 ]&&echo "$1 > $2"
     [ $1 -eq $2 ]&&echo "$1 = $2"
     [ $1 -lt $2 ]&&echo "$1 < $2"
}
main(){
     [ -z "$1" ]&&usage
     [ -z "$2" ]&&usage
     expr $1 + $2 + 1 &>/dev/null
     [ $? -ne 0 ]&&usage
     compare $1 $2
}
main $1 $2

方法二:

#!/bin/bash
read -p "Input a:" a
read -p "Input b:" b
[ -z "$a" ]&&echo "usage:$0 int1 int2"&&exit 1
[ -z "$b" ]&&echo "usage:$0 int1 int2"&&exit 2
expr $a + $b + 1 &>/dev/null
[ $? -ne 0 ]&&echo "usage:$0 int1 int2"&&exit 3
[ $a -gt $b ]&&echo "$a > $b"
[ $a -eq $b ]&&echo "$a = $b"
[ $a -lt $b ]&&echo "$a < $b"

企业实用脚本12

打印选择菜单,一键安装Web服务:

[[email protected]ipts]# sh menu.sh

1.[install lamp]

2.[install lnmp]

3.[exit]

pls input the num you want:

要求:

1、当用户输入1时,输出“startinstalling lamp.”然后执行/server/scripts/lamp.sh,脚本内容输出"lampis installed"后退出脚本;

2、当用户输入2时,输出“startinstalling lnmp.”然后执行/server/scripts/lnmp.sh输出"lnmpis installed"后退出脚本;

3、当输入3时,退出当前菜单及脚本;

4、当输入任何其它字符,给出提示“Input error”后退出脚本。

5、要对执行的脚本进行相关条件判断,例如:脚本是否存在,是否可执行等。

#!/bin/bash
menu(){
   cat <<END
   1.[install lamp]
   2.[install lnmp]
   3.[exit]
END
}
menu
file1=/server/scripts/lamp.sh
file2=/server/scripts/lnmp.sh
read -p "Select num which you want:" a
[ -z "$a" ]&&{
   echo "You shoult input one num..."
   exit 1
}
[ $a -ne "1" -a $a -ne "2" -a $a -ne "3" ]&&{
   echo "Input num with 1 or 2 or 3..."
   exit 2
}
[ $a -eq "1" ]&&{
  if [ -f "$file1" -a -x "$file1" ]
  then
     echo "start install lamp..."
     /bin/sh $file1
  else
     echo "$file1 is not exist or can not be execute!"
     exit 3
  fi
  }
[ $a -eq "2" ]&&{
   if [ -f "$file2" -a -x "$file2" ]
  then
     echo "start install lnmp..."
     /bin/sh $file2
  else
     echo "$file2 is not exist or can not be execute!"
     exit 4
  fi
}
[ $a -eq 3 ]&&{
  echo "Exit install..."
  exit 5
}

企业实用脚本13

1、监控web服务是否正常,不低于3种监控策略。

2、监控db服务是否正常,不低于3种监控策略。

要求间隔1分钟,持续监控。

#!/bin/bash
url=wwchengbi.cn
Port=80
check_web(){
[ -f /etc/init.d/functions ]&& . /etc/init.d/functions
if [ "`nc -w 5 $url $Port &&echo ok`" = "ok" ];then
#if [ "`echo -e ‘\n‘|telnet $url $Port|grep Connected|wc -l`" = "1" ];then
#if [ "`nmap $url -p $Port|grep open|wc -l`" = "1" ];then
#if [ "`curl -I http://$url 2>/dev/null|head -1|egrep "200|302|301"|wc -l`" = "1" ];then
#if [ "`curl -I -s -o /dev/null -w ‘%{http_code}\n‘ http://$url`" = "200" ];then
   action "$url $Port" /bin/true
else
   action "$url $Port" /bin/false
fi
}
main(){
      while true
      do
      check_web
      sleep 1m
      done
}
main
#!/bin/bash
Port=3306
check_db(){
[ -f /etc/init.d/functions ]&& . /etc/init.d/functions
#if [ `lsof -i:$Port|wc -l` -gt 1 ];then
#if [ "`netstat -tunlp|grep 3306|wc -l`" = "1" ];then
 if [ `mysql -umha -pmha -h 172.16.2.10 -P $Port -e "show databases;"|wc -l` -gt 1 ];then
   action "MySQL $Port online" /bin/true
else
   action "MySQL $Port down" /bin/false
fi
}
main(){
      while true
      do
      check_db
      sleep 1m
      done
}
main

企业实用脚本14

监控memcache服务是否正常,模拟用户(web客户端)检测。

使用nc命令加上set/get来模拟检测,以及监控响应时间及命中率

企业实用脚本15

面试及实用考试题:监控web站点目录(/var/html/www)下所有文件是否被恶意篡改(文件内容被改了),如果有就打印改动的文件名(发邮件),定时任务每3分钟执行一次(10分钟时间完成)

#!/bin/bash
check_www(){
    md5sum -c /tmp/md5_www.log > /tmp/result_www.log
    [ ! -f /tmp/result_www.log ]&&echo "/tmp/result_www.log not exist."exit2
    exec < /tmp/result_www.log
    while read line
    do
       file=`echo $line|awk -F ‘ ‘ ‘{printf $1}‘`
       result=`echo $line|awk -F ‘ ‘ ‘{printf $2}‘`
       #echo $file 
       #echo $result
       [ ! "$result" = "OK" ]&&action "$file" /bin/false
    done
}
main(){
     while true
     do
     LANG=en
     [ -f /etc/init.d/functions ]&& . /etc/init.d/functions
     [ ! -f /tmp/md5_www.log ]&& echo "/tmp/md5_www.log not exsit."&&exit 1
     check_www
     action "Alii check done." /bin/true
     sleep 3m
     done
}
main
时间: 2024-11-03 01:31:15

shell企业级实用基础脚本(汇总1/2)的相关文章

shell企业级实用基础脚本(汇总2/2)

企业实用脚本16 企业案例:写网络服务独立进程模式下rsync的系统启动脚本 例如:/etc/init.d/rsyncd{start|stop|restart} . 要求: 1.要使用系统函数库技巧. 2.要用函数,不能一坨SHI的方式. 3.可被chkconfig管理 #!/bin/bash [ -f /etc/init.d/functions ]&& . /etc/init.d/functions||exit 2 Start(){       if [ `lsof -i:873|wc 

shell脚本汇总 2 删除创建时间超过32天的文件

shell脚本汇总 2 删除创建时间超过32天的文件 #!/bin/bash #date:2017-04-11 #version:clear_ballcloud_back_v1.0 #contents: removing the  /www/web/ballcloud_bakck/* , if the file is created above 32 day # cd /www/web #sum the size of already delete directory dirsize=`du -

shell脚本汇总 1 以年月日命名备份文件

shell脚本汇总 1 以年月日命名备份文件 #!/bin/bash # create a back package for mysql of ball and web of ballcloud # # backup mysql for ball and web for ballcloud cd /www/web/backup_ballcloud/ year=`date +%Y ` month=`date +%m ` day=`date +%d ` now=$year-$month-$day #

Shell之/bin/bash脚本的基础实战

本人菜鸟一枚,初次接触linux的shell脚本: shell script,最简单的功能就是将许多指令汇整写一起,让使用者很容易地就能够一个操作执行多个命令,而shell script更是提供了数组,循环,条件以及逻辑判断等重要功能,让使用者可以直接以shell来写程序,而不必使用类似C程序语言等传统程序编写的语法. shell脚本的好处: 在一些复杂的linux运维工作中,大量的重复的输入和交互操作,可以通过shell脚本批量的处理,自动化的完成维护,从而减轻更多的人力成本. linux的s

Linux Shell学习之基础篇

在学习Linux和OpenStack过程中,感觉不管是大规模部署部署还是运维,Shell脚本都已经是标配,所以学好脚本很有必要. 以下仅为Linux Shell的一些基础笔记,这里作为笔记记下. ===============linux shell简介====================== 1.命令补全:连续按两次Tab   文件或者文件夹补全:一次Tab   命令帮助:--help 2.chmod u=rwx,g+w,o+r filename   chown root.root file

shell编程之服务脚本编写,文件锁以及信号捕获

shell脚本编程是linux运维工程师必备的技能,也是非常重要的一个技能,所以把shell编程学好,只有好处.基础语法我也就不讲了,学过C语言这些语言的,稍微看一下就能明白shell编程的基础,所以我们直接切入正题. 开班第20天: 今天的课程大纲: shell编程中的函数 编写一个自动挂载的脚本 利用autofs怎么实现自动挂载 文件锁和信号捕获trap sed流文件编辑器 详细讲解: shell编程中的函数 shell中,我们定义函数的方法有两种: 下面调用的时候,直接调用函数名就可以了

二、shell文件权限和脚本执行

一.认识权限和用户管理 1.查看权限 权限类型: 1.r 读 2.w 写 3.x 可执行 Linux用户 1.所有者(u) 2.所属组(g) (所有者及所有者所在组的全部用户) 3.其他用户(o)(其他组的所有用户(包括文件所有者)) 4.所有用户(a) 文件权限解读 文件类型 所有者权限  所属组权限  其他用户权限            所有者  用户所在的组  文件大小  创建时间  文件名 [[email protected] ~]# ll 总用量 100 -rw-------. 1 r

【shell】oracle安装脚本 - 未完成

自动安装oracle所需要的rpm包(需要访问外网): #! /bin/sh rpmpack=" binutils compat-libstdc++* elfutils-libelf elfutils-libelf-devel elfutils-libelf-devel-static gcc gcc-c++ glibc glibc-common glibc-devel glibc-headers kernel-headers ksh libaio libaio-devel libgcc libg

Delphi基础知识汇总

☆Delphi基础数据类型 分类 范围 字节 备注 简单类型 序数 整数 Integer -2147483648 .. 2147483647 4 有符号32位 Cardinal 0 .. 4294967295 4 无符号32位 Shortint -128 .. 127 1 有符号8位 Smallint -32768 .. 32767 2 有符号16位 Longint -2147483648 .. 2147483647 4 有符号32位 Int64 -263 .. 263 8 有符号64位 Byt