shell脚本案例(一):常见运维面试题

shell是运维人员应该具备的基本技能一,熟练掌握及运用shell,对提升运维作业效率与质量有很大帮助。在这里,将会结合工作中各种场景,利用shell脚本解决问题,完成目标。


  1. 监控MySQL主从同步是否异常,如果异常,则发送短信或者邮件给管理员。
    a. 开发一个守护进程脚本每30秒实现检测一次。
    b. 如果同步出现如下错误号(1158,1159,1008,1007,1062),则跳过错误。
    c. 请使用数组技术实现上述脚本(获取主从判断及错误号部分)。

    
    #!/bin/bash
    
    mysqlbin=/usr/bin/mysql
    mysqlhost=127.0.0.1
    mysqluser=root
    mysqlpwd=root
    skiperrors=(1158 1159 1008 1007 1062)
    admin='email@qq.com'
    
    check() {
    LASTNO=$($mysqlbin -h$mysqluser -u$mysqluser -p$mysqlpwd -e "show slave status\G"|grep Last_Errno|awk -F: '{print $2}')
    }
    
    skip() {
    for errorno in ${skiperrors[@]};do
     if [ $errorno == $LASTNO ];then
      notify $errorno
      break
     fi
    done   
    }
    
    notify() {
    text="mysql slave monitor error: $1"
    echo $text|mail -s 'mysql error'
    }
    
    main() {
    while :;do
     check && skip || notify "mysql connected failed!"
     sleep 30
    done
    }
    
    main
  2. 使用for循环在目录下通过随机小写10个字母加固定字符串file批量创建10个。

    
    #!/bin/bash
    
    
    gen_num() {
    local n
    min=$1
    max=$(($2-$min+1))
    n=$(($RANDOM+1000000000))
    echo $(($n%$max+$min))
    }
    
    gen_randletters() {
    local l
    local n
    
    #raw=(a b c d e f g h i g k l m n o p q r s t u v w x y z)
    
    raw=({a..z})
    l=$1
    for ((i=1;i<=$l;i++));do
     n=$(gen_num 0 26)
     letters+=${raw[$n]}
    done
    echo $letters
    }
    
    gen_randnames() {
    suffix=_file
    local l
    local n
    n=$1
    l=$2
    for ((i=
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值