Shell练习(26-30)-2019.1.9

26.监控MySQL服务

需求:

  • 检测MySQL服务是否正常(比如可以正常进入mysql执行show processlist),并检测一下当前的MySQL服务是主是从,如果是从,亲啊判断她的主从服务是否异常,如果是主,则不需要做什么

核心要点:

  • mysql -uroot -p123456 -e "show processlist"
  • show slave status
  • mysql -uroot -p123456 -e "show slave stastus\G"      #如果什么都不显示,则为主机,如果显示一大串信息,则为从,在从上“Slave_IO_Running”和"Slave_SQL_Running"显示的从的装态,如果有No,则说明主从存在问题
[root@Chauncey ~]# cat 26.sh
#!/bin/bash
mysql="/usr/local/mysql/bin/mysql -uroot -p123456"
if ! $mysql -e "show processlist" >/dev/null 2>/dev/null
then
   echo "MySQL service is down."
   exit
else
   $mysql -e "show slave status\G" 2>/dev/null >/tmp/slave.stat
   n=`wc -l /tmp/slave.stat|awk '{print $1}'`
   if [ $n -eq 0 ]
   then
      echo "This is master"
   else
      echo "This is slave."
      egrep 'Slave_IO_Running:|Slave_SQL_Running'|awk -F ':' '{print $2}' > /tmp/SQL.tmp
      if grep -qw "NO" /tmp/SQL.tmp
      then
         echo "The slave is down."
      fi
    fi
fi
[root@Chauncey ~]# 

27.1增删用户

需求:写一个支持选项的增加或删除用户的shell脚本,具体要求如下:

  • 支持三个选项“--del”,"--add","--help",输入其他选项报错
  • 使用“--add”时,需要验证用户名是否存在,存在则反馈存在,且不添加,不存在则创建该用户,需要设置与该用户名相同的密码;
  • 使用"--del“时,需要验证用户名是否存在,存在则删除用户及家目录,不存在则反馈该用户不存在。
  • --help选项反馈出使用的方法
  • 能用echo$?检测脚本的执行情况,成功删除或添加用户为0,不成功为非0正整数
  • 能以英文逗号分割,一次性添加或者删除多个用户。例如adddel.sh --add user1,user2,user3

核心要点:

  • case判断
  • 批量添加多用户,需要for循环
[root@Chauncey home]# cat 27.sh 
#!/bin/bash
if [ $# -eq 0 ]               ############输入的参数为空
then
   echo "Wrong,use bash $0  --add username, or bash $0   --del username or bash $0 --help"
fi

case $1 in
    --add)
        if [ $# -gt 2 ]
        then
           echo "Wrong,use bash $0 --add user or bash $0 --add user1,user2,user3..."
           exit
        else
           n=`echo $2 awk -F '.' '{print NF}'`
           if [ $n -gt 1 ]
           then 
              for i in `seq 1 $n`
              do
                  username=`echo $2 |awk -v j=$i -F ',' '{print $j}'`
                  useradd $username
              done
           else
              useradd $2
           fi
         fi
          ;;
    --del)
         if [ $# -gt 2 ]
        then
           echo "Wrong,use bash $0 --del user or bash $0 --del user1,user2,user3..."
           exit
        else
           n=`echo $2 awk -F '.' '{print NF}'`
           if [ $n -gt 1 ]
           then
              for i in `seq 1 $n`
              do
                  username=`echo $2 |awk -v j=$i -F ',' '{print $j}'`
                  userdel $username
              done
           else
              userdel $2
           fi
         fi
          ;;
     --help)
           echo "Use bash $0 --add username or bash$0 --add user1,user2,user3...add user"
           echo "Use bash $0 --del username -r bash$0 --del user1,user2,user3...delete user"
	   echo "Use bash $0 --help print this info."
           ;;
          *)
           echo "Wrong,use bash $0  --add username, or bash $0   --del username or bash $0 --help"
           ;;
esac

28.计算和

需求:

  • 写一个脚本:计算100以内所有能被3整出的正整数的和

核心要点:

  • 被3整除,余数为0
  • for循环求和
[root@Chauncey home]# cat 28.sh
#!/bin/bash

sum=0
for n in `seq 1 100`
do
  m=$((n%3))
     if [ "$m" -eq "0" ]
     then 
        sum=$(($sum+$n))
     fi
done
echo $sum

29.加减乘除

需求:

  • 使用传参的方法写脚本,实现加减乘除的功能
  • 例如:sh a.sh 1 2,这样会分别计算加、减、乘、除的结果
  • 脚本需要判断提供的两个数字必须为整数
  • 当作减法或者除法时,需要判断哪个数字大,减法时需要用大的数字减小的数字,除法时需要用大的数字除以小的数字,并且结果需要保留两个小数点

核心要点:

  • 参数只能是2个整数
  • 判断数字大小
[root@Chauncey home]# cat 29.sh
#!/bin/bash
is_nu()
{
   n=`echo $1 |sed 's/[0-9]//g'`           ####判断n是否为整数
   if [ -n "$n" ]
   then
       echo "请输入正整数"
       exit
   fi
}
if [ $# -ne 2 ]                             ########判断是否输入了两个参数
then
   echo "必须要输入两个参数"
   exit
else
       is_nu $1
       is_nu $2
       exit
fi

big()
{
   if [ $1 -gt $2 ]
   then
      echo $1
   else
      echo $2
   fi
}

small()
{
   if [ $1 -gt $2 ]
   then 
      echo $1
   else
      echo $2
   fi
}

add()
{
    sum=$[$1+$2]
    echo "$1+$2=$sum"
}

jian()
{
    b=`big $1 $2`
    s=`smail $1 $2`
    cha=$[$b-$s]
    echo "$b-$s=$cha"
}

cheng()
{
    ji=$[$1+$2]
    echo "$1*$2=$ji"
}

chu
{
    b=`big $1 $2`
    s=`smail $1 $2`
    v=`echo "scale=2;$b/$s"|bc`
    echo "$b/$s=$v"
}

add $1 $2
jian $1 $2
cheng $1 $2
chu $1 $2
[root@Chauncey home]# 

30.输入数字

需求:

  • 写一个脚本,执行后,打印一行提示“Please input a number:”,要求用户输入数值,然后打印出该数值,然后再次要求用户输入数值,直到用户输入“end”停止

核心要点:

  • 判断输入的字符是否是纯数字
[root@Chauncey home]# cat 30.sh
#!/bin/bash
while :
do
   read -p "Please input a number:" n
   if [ -z "$n" ]
   then 
      echo "请输入一个纯数字:"
      continue
   fi
   if echo $n | grep -qi 'end'
   then
      exit
   fi
   n1=`echo $n | sed 's/[0-9]//g'`
   if [ -n "$n1" ]
   then
      echo "请输入一个纯数字:"
      continue
   else
      echo "你输入的数字是:$n"
      continue
   fi
done

猜你喜欢

转载自blog.csdn.net/Chauncey_Qin/article/details/86145851
今日推荐