Linxu Shell DAY17

26.监控mysql服务

27.增删用户

28.计算和

29.加减乘除

30.输入数字


监控mysql服务

题目要求

假设,当前MySQL服务的root密码为123456,写脚本检测MySQL服务是否正常(比如,可以正常进入mysql执行show processlist),

并检测一下当前的MySQL服务是主还是从,如果是从,请判断它的主从服务是否异常。如果是主,则不需要做什么。

核心要点

mysql -uroot -p123456 -e "show processlist"       有服务,有输出,没有服务,有报错

show slave status

代码

#!/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:'/tmp/slave.stat|awk -F ': ' '{print $2}' > /tmp/SQL.tmp

        if grep -qw "No" /tmp/SQL.tmp

        then

            echo "The slave is down."

        fi

    fi

fi

增删用户

题目要求

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

  1. 只支持三个选项:'--del','--add','--help',输入其他选项报错。

  2. 使用'--add'时,需要验证用户名是否存在,存在则反馈存在,且不添加。 不存在则创建该用户,需要设置与该用户名相同的密码。

  3. 使用'--del'时,需要验证用户名是否存在,存在则删除用户及其家目录。不存在则反馈该用户不存在。

  4. --help选项反馈出使用方法。

  5. 能用echo $?检测脚本执行情况,成功删除或添加用户为0,不成功为非0正整数。

  6. 能以英文逗号分割,一次性添加或者删除多个用户。例如 adddel.sh --add user1,user2,user3

核心要点

case判断

批量添加多用户,需要for循环

代码

#!/bin/baash

if \[ $# -eq 0 \] || \[ $# -gt 2 \]                                    # 参数用$#去判断

then

    echo "Wrong, use bash $0 --add username, or bash $0 --del username or bash $0 --help"             #用$0表示脚本本身

    exit

fi

ex_user()

{

    if ! id $1 2>/dev/null >/dev/null

    then

        useradd $1 && echo "$1 add successful."

    else

        echo $1 exist.

    fi

}

notex_user()

{

    if id $1 2>/dev/null >/dev/null

    then

        userdel $1 && echo "$1 delete successful."

    else

        echo $1 not exist.

    fi

}

case $1 in

    --add)

        if \[ $# -eq 1 \]

        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}'\`    # -v顶一个新变量 j, awk不能直接用$i

                    ex_user $username

                done

            else

                ex_user $2

            fi

        fi

        ;;

    --del)

        if  \[ $# -eq 1 \]

        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}'\`

                    notex_user $username

                done

            else

                notex_user $2

            fi

        fi

        ;;

    --help)

        if  \[ $# -ne 1 \]

        then

            echo "Wrong, use bash $0 --help"

            exit

        else

        echo "Use bash $0 --add username or bash $0 --add user1,user2,user3... add user."

        echo "    bash $0 --del username -r bash $0 --del user1,user2,user3... delete user."

        echo "    bash $0 --help print this info."

        fi

    ;;

    *)

        echo "Wrong, use bash $0 --add username, or bash $0 --del username or bash $0 --help"

    ;;

esac

计算和

题目要求

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

核心要点

被3整除,余数为0

for循环求和

代码

#!/bin/bash

sum=0

for i in \`seq 1 100\`

do

    j=$\[$i%3\]

    if \[ $j -eq 0 \]

    then

        sum=$\[$sum+$i\]

    fi

done

echo $sum

加减乘除

题目要求

使用传参的方法写个脚本,实现加减乘除的功能。 例如:  sh  a.sh  1   2,这样会分别计算加、减、乘、除的结果。

要求:

  1. 脚本需判断提供的两个数字必须为整数

  2. 当做减法或者除法时,需要判断哪个数字大,减法时需要用大的数字减小的数字,除法时需要用大的数字除以小的数字,并且结果需要保留两个小数点。

核心要点

参数只能是2个整数

判断数字大小

代码

#!/bin/bash

is_nu()

{

    n=\`echo $1 |sed 's/\[0-9\]//g'\`

    if \[ -n "$n" \]

    then

        echo "给出的参数必须是正整数"

        exit

    fi

}

if \[ $# -ne 2 \]

then

    echo "必须要输入两个参数"

    exit

else

    is_nu $1

    is_nu $2

fi

big()

{

    if \[ $1 -gt $2 \]

    then

        echo $1

    else

        echo $2

    fi

}

small()

{

    if \[ $1 -lt $2 \]

    then

        echo $1

    else

        echo $2

    fi

}

add()

{

    sum=$\[$1+$2\]

    echo "$1+$2=$sum"

}

jian()

{

   b=\`big $1 $2\`

   s=\`small $1 $2\`

   cha=$\[$b-$s\]

   echo "$b-$s=$cha"

}

cheng()

{

    ji=$\[$1*$2\]

    echo "$1x$2=$ji"

}

chu()

{

   b=\`big $1 $2\`

   s=\`small $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

输入数字

题目要求

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

核心要求

判断输入字符是否是纯数字

代码

#!/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

转载于:https://my.oschina.net/u/3959701/blog/3101979

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值