热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

六、流程控制语句

选择结构if只有条件判断结果为真时才执行相应的操作循环结构for、whileuntil反复执行相同操作时,使用循环结构分支结构case根据变量值的匹配结果执行相

 

 

选择结构if 只有条件判断结果为真时才执行相应的操作

循环结构
forwhile/until 反复执行相同操作时,使用循环结构

分支结构case 根据变量值的匹配结果执行相应的操作

 

 

if选择结构

 

 

if选择结构-单分支

 

 

 

 

当'条件成立'时执行相应的操作
否则,不执行任何操作

 

 

格式1:

if 条件判断表达式;then条件判断成立时,要执行的操作fi

 

格式2

 

 

if 条件判断表达式
then条件判断成立时,要执行的操作
fi

 

 

 

例子1:

#!/bin/bash
ping
-c 3 localhost &> /dev/null
if [ $? -eq 0 ];thenecho aaaaafi

 

例子2:

#!/bin/bash
read
-p "please input ip address " addr
if [ -z $addr ];thenecho "你没有输入要ping的ip地址"exit
fi
ping
-c 3 $addr &> /dev/null
if [ $? -eq 0 ];thenecho "$addr is onlines"
fi
echo
"script over!!!"

 

 提示:分号相当于命令分号,上面两种语法等同。

 

特殊写法:if [ -f "$file1" ];then echo 1;fi相当于[ -f "$file1" ] && echo 1

 

 

 

 

下面举几个使用if条件句的例子

范例1:单分支if条件句整数比较大小

[root&#64;localhost ~]#cat if_01.sha&#61;$1b&#61;$2if [ $a -gt $b ]thenecho "yes,$a >&#61; $b"fiif [ $a -le $b ]thenecho "yes,$a<&#61;$b"fi[root&#64;localhost ~]# sh if_01.sh 4 5yes,4<&#61;5

 

 

范例2&#xff1a;使用read及脚本传参如何实现上述比较

解答&#xff1a;

[root&#64;localhost ~]# cat if_01.sh

read -p "pls input two numbers:" a bif [ $a -gt $b ]thenecho "yes,$a >&#61; $b"fiif [ $a -le $b ]thenecho "yes,$a<&#61;$b"fi

 

[root&#64;localhost ~]# sh  if_01.sh

pls input two numbers:100 99yes,100 >&#61; 99

 

提示&#xff1a;思考以上脚本有什么缺点&#xff1f;

 

范例3&#xff1a;实现如果/server/scripts下面存在if3.sh就打印if3.sh存在。&#xff08;如果执行脚本后发现文件不存在&#xff0c;就创建这个脚本&#xff09;

方法1&#xff1a;if条件句实现

[root&#64;localhost scripts]# cat if4.sh#!/bin/bashFILEPATH&#61;"server/scripts"if [ -e "$FILEPATH/if3.sh" ]thenecho "$FILEPATH/if3.sh is exist."fiif [ ! -e "$FILEPATH/if3.sh" ]then[ ! -d $FILEPATH ] && mkdir -p $FILEPATH[ -d $FILEPATH ] && {cd $FILEPATHtouch if3.shecho "if3.sh is touched."}fi

 

[root&#64;localhost scripts]# sh -x if4.sh

&#43; FILEPATH&#61;server/scripts&#43; &#39;[&#39; -e server/scripts/if3.sh &#39;]&#39;&#43; &#39;[&#39; &#39;!&#39; -e server/scripts/if3.sh &#39;]&#39;&#43; &#39;[&#39; &#39;!&#39; -d server/scripts &#39;]&#39;&#43; mkdir -p server/scripts&#43; &#39;[&#39; -d server/scripts &#39;]&#39;&#43; cd server/scripts&#43; touch if3.sh&#43; echo &#39;if3.sh is touched.&#39;if3.sh is touched.

 

范例4&#xff1a;判断系统内存大小&#xff0c;低于100M就进行邮件报警

[root&#64;localhost scripts]# free -m

total used free shared buffers cachedMem: 988 769 218 0 97 313-/&#43; buffers/cache: 358 629Swap: 2047 0 2047

 

[root&#64;localhost scripts]# free -m|awk &#39;/buffers\// {print $NF}&#39;

629

 

[root&#64;localhost scripts]# cat judge_system.sh

cur_free&#61;&#96;free -m|awk &#39;/buffers\// {print $NF}&#39;&#96;chars&#61;"current memory is $cur_free."if [ $cur_free -lt 650 ]thenecho $charsecho $chars|mail -s "chars" 12345678&#64;qq.comfi

 

[root&#64;localhost scripts]# sh judge_system.sh

current memory is 629.

 

用定时任务每分钟检查&#xff08;如果每分钟检查的话&#xff0c;就不用输出了&#xff09;&#xff1a;

[root&#64;localhost scripts]# cat judge_system.shchars&#61;"current memory is $cur_free."if [ $cur_free -lt 650 ]thenecho $chars|mail -s "chars" 12345678&#64;qq.comfi

 

 

 

[root&#64;localhost scripts]# crontab -e

#judge.....* * * * * /bin/bash /server/scripts/judge_system.sh >&/dev/null

 

 

 

 

 

 

if选择结构-双分支

 

 

 

 

当&#39;条件成立&#39;时执行命令序列1
否则&#xff0c;执行命令序列2

 

 

格式1&#xff1a;

if 条件判断表达式;then条件判断成立时&#xff0c;要执行的操作
else条件判断不成立时&#xff0c;要执行的操作
fi

 

 

 

格式2&#xff1a;

 

 

if 条件判断表达式
then条件判断成立时&#xff0c;要执行的操作
else条件判断不成立时&#xff0c;要执行的操作
fi

 

 特殊写法&#xff1a;

 

if [ -f “$file1” ];then echo 1;else echo 0;fi相当于&#xff1a;[ -f “$file1” ] && echo 1 || echo 0

 

例子1&#xff1a;

如果httpd服务在运行着就输出 "网站服务正在运行"

 

如果httpd服务没有运行 就把网站服务开启

 

 

#!/bin/bash
service httpd status
&> /dev/null
if [ $? -eq 0 ];thenecho "网站服务正在运行"
elseservice httpd start
fi

 

 

例子2&#xff1a;

#!/bin/bash
service sshd status
&> /dev/null
if [ $? -eq 0 ];thenecho "sshd in running"
elseservice sshd start
fi

 

例子3&#xff1a;

检查任意一个服务的状态

如果服务是运行着的&#xff0c;就输出服务名is running

如果服务没有运行&#xff0c;就启动服务。

 

 

 

#!/bin/bash
service $
1 status &> /dev/null
if [ $? -eq 0 ];thenecho "$1 is running!!!!"
elseservice $1 start
fi

 

只检查服务vsftpd httpd sshd crond mysql中的任意一个服务的状态&#xff0c;如果不是这5&#xff0c;就提示用户能够检查服务名并退出脚本

 

 

#!/bin/bash
read
-p "请输入服务名" servername
if [ $ servername&#61;&#61;"vsftpd" -o $servername&#61;&#61;"httpd" -o $servername&#61;"sshd" -o $servername&#61;"crond" -o $servername&#61;mysql];thenservice $servicename status &> /dev/nullif [ $? -eq 0 ];thenecho $ servicename is runningelse service $servicename startfi
fi

 

 

 

 

 

 

 

根据学生输入的成绩判断学生成绩的优劣。学生成绩的分数范围在1~100区间。成绩分数小于60输出不及格&#xff1b;成绩分数大于等于60输出 及格

 

 

 

read -p "请输入学生成绩&#xff1a;" chengji
if [ -z $chengji ];thenexit
fi
if [ $chengji -ge 1 ]&& [ $chengji -le 100 ]
then
if [ $cengji -lt 60 ]then echo "不及格"else echo "及格"fi
elseecho "输入格式错误"
fi

 

 

 

 

 

 

#ifelse_exam1脚本用于判断输入的文件名是否有对应的文件存在

 

 

#!/bin/bash
#if语句用于判断输入的文件是否不存在&#xff0c;不存在则执行then和else间的命令
if [ ! -e "$1" ]
then echo
"file $1 do not exist."exit 1
#输入的文件存在时&#xff0c;执行else和fi间的命令
elseecho "file $1 exist."
fi

 

 

#ifelse_exam2脚本用于删除一个文件并判断是否执行了该操作

 

#!/bin/bash
#提示用户输入要删除的文件
echo
"Please input the file which you want to delete:" read file
#通过if
/else结构判断文件是否被删除
if rm -f "$file"
then echo
"Delete the file $file successfully!"
elseecho "Delete the file $file failed!"
fi

 

 

 

每周一的 23:30 备份当前数据库服务器上所有的binlog日志文件到系统的/binlogdir目录里.

#!/bin/bash
mysql
&#61;"/var/lib/mysql"
date
&#61;(date &#43;\%Y\%m\%d)
cd $mysql
if [ -e /binlogdir ];thentar -zcf /binlogdir/binlog-$date.tar.gz data-bin.* &> /dev/null
elsemkdir /binlogdirtar -zcf /binlogdir/binlog-$date.tar.gz data-bin.* &> /dev/null
fi

 

 

 

if选择结构-多分支

 

 

相当于if语句嵌套
针对多个条件分别执行不同的操作

 

 

 

 

 

 

 

格式1&#xff1a;

 

if 条件判断表达式1;then条件1判断成立时&#xff0c;要执行的操作

elif 条件判断表达式2;then条件2判断成立时&#xff0c;要执行的操作
if 条件判断表达式N;then条件N判断成立时&#xff0c;要执行的操作
else以上所有的条件判断都不成立时&#xff0c;要执行的操作
fi

 

 

根据学生输入的成绩判断学生成绩的优劣。

学生成绩的分数范围在1~100区间

成绩 分数小于60 输出 不及格

成绩 分数大于等于60且小于80 输出 良好

成绩 分数大于80且小于100 输出 优秀

如果输入的成绩超出成绩区间&#xff0c;就输出提示信息&#xff1a;成绩的分数范围在1~100区间

 

 

 

#!/bin/bash
read
-p "输入成绩" cj
if [ -z $cj ];thenecho "你没有输入成绩分数"exit
elseif [ $cj -eq 0 ];thenecho "补考"elif [ $cj -lt 0 ];thenecho "输入的成绩超过范围&#xff0c;有效范围在1-100"

elif [ $cj -ge 1 ]&&[ $cj -lt 60 ];thenecho "不及格"

elif [ $cj -ge 60 ]&&[ $cj -lt 80 ];thenecho "良好"

elif [ $cj -ge 80 ]&&[ $cj -le 100 ];thenecho "优秀"

elif [ $cj -gt 1 ];thenecho "输入的成绩超过范围&#xff0c;有效范围在1-100"fi
fi

 

 

练习&#xff1a;写一个脚本
传递一个参数(单字符就行)给脚本&#xff0c;如参数为q、Q、quit或Quit&#xff0c;就退出脚本&#xff1b;否则&#xff0c;就显示用户的参数&#xff1b;

#!/bin/bash
#
if [ $1 &#61; &#39;q&#39; ];thenecho "Quiting..."exit 1
elif [ $
1 &#61; &#39;Q&#39; ];thenecho "Quiting..."exit 2
elif [ $
1 &#61; &#39;quit&#39; ];thenecho "Quiting..."exit 3
elif [ $
1 &#61; &#39;Quit&#39; ];thenecho "Quiting..."exit 4
elseecho $1
fi

 

 

#ifelifelse_exam1.sh脚本

#!/bin/bash
#提示用户输入分数&#xff08;
0&#xff5e;100&#xff09;
echo
"Please Input a integer(0-100): "
read score
#判断学生的分数类别
if [ "$score" -lt 0 -o "$score" -gt 100 ]
thenecho
"The score what you input is not integer or score is not in (0-100)"
elif [
"$score" -ge 90 ]
thenecho
"The grade is A!"
elif [
"$score" -ge 80 ]
then echo
"The grade is B! "
elif [
"$score" -ge 70 ]
thenecho
"The grade is C!"
elif [
"$score" -ge 60 ]
thenecho
"The grade is D! "
elseecho "The grade is E! "
fi

 

判断是否是闰年

#ifelifelse-exam2.sh脚本的执行结果
#
!/bin/bash
#提示输入年份
echo
"Please input a year: "
read year
#设置取余参数
let
"n1&#61;$year % 4"
let
"n2&#61;$year % 100"
let
"n3&#61;$year % 400"
#判断输入的年份是否是闰年
if [ ! "$n1" -eq 0 ]
then leap
&#61;0
elif [
! "$n2" -eq 0 ]
then leap
&#61;1
elif [
! "$n3" -eq 0 ]
then leap
&#61;0
elseleap&#61;1
fi
#输出用户输入的年份是否是闰年
if [ "$leap" -eq 1 ]
then echo
"$year is a leap year!"
elseecho "$year is not a leap year!"
fi

 

 

范例5&#xff1a;多分支if条件句整数比较大小

[root&#64;localhost scripts]# cat if_02.shread -p "pls input two numbers:" a bif [ $a -gt $b ]thenecho "yes,$a > $b"elif [ $a -eq $b ]thenecho "yes,$a&#61;$b"elseecho "yes,$a<$b"fi

 

[root&#64;localhost scripts]# sh if_02.sh

pls input two numbers:4 5

yes,4<5

 

范例6&#xff1a;以命令行脚本传参的方式比较两个数的大小&#xff0c;请用多分支if语句来实现。

1&#xff1a;多分支if语句实现对传入的参数进行判断的方法

[root&#64;localhost scripts]# cat if_02.sh

a&#61;$1b&#61;$2if [ $# -ne 2 ]thenecho "Usage:sh $0 num1 num2"exit 1fiif [ $a -gt $b ]thenecho "yes,$a > $b"elif [ -eq $b ]thenecho "yes,$a&#61;$b"elseecho "yes,$a<$b"fi

 

2&#xff1a;多分支if语句实现对参数个数及类型严格判断的方法

[root&#64;localhost scripts]# cat if_02.sha&#61;$1b&#61;$2if [ $# -ne 2 ]thenecho "Usage:sh $0 num1 num2"exit 1fi[ -n "&#96;echo $1|sed &#39; s/[0-9]//g&#39;&#96;" ]&& echo "第一个参数必须为数字" && exit 1[ -n "&#96;echo $2|sed &#39; s/[0-9]//g&#39;&#96;" ]&& echo "第二个参数必须为数字" && exit 1if [ $a -gt $b ]thenecho "yes,$a > $b"elif [ -eq $b ]thenecho "yes,$a&#61;$b"elseecho "yes,$a<$b"fi

 

 

扩展&#xff1a;判断字符串是否为数字的多种方法

1&#xff1a;sed加正则表达式

命令行传参&#xff1a;

组合语法判断1&#xff1a;

[ -n "&#96;echo $num|sed &#39; s/[0-9]//g&#39;&#96;" -a -n "&#96;echo $2|sed &#39; s/[0-9]//g&#39;&#96;" ] &&\

 

echo "两个参数都必须为数字" && exit 1

组合语法判断2&#xff1a;

[ -n "&#96;echo $num|sed &#39; s/[0-9]//g&#39;&#96;" -a -n "&#96;echo $2|sed &#39; s/[0-9]//g&#39;&#96;" ] &&{echo "两个参数都必须为数字

exit
1}

 

单个判断语法&#xff1a;

[ -n "&#96;echo $1|sed &#39; s/[0-9]//g&#39;&#96;" ] && echo "第一个参数必须为数字" && exit 1[ -n "&#96;echo $2|sed &#39; s/[0-9]//g&#39;&#96;" ] && echo "第二个参数必须为数字" && exit 1

 

普通变量判断&#xff1a;

[ -n "&#96;echo $num|sed &#39; s/[0-9]//g&#39;&#96;" ] && echo "第二个参数必须为数字" && exit 1

 

条件表达式&#xff0c;大括号的用法&#xff1a;

[ -n "&#96;echo $num|sed &#39; s/[0-9]//g&#39;&#96;" ] && {echo "第二个参数必须为数字"exit 1}

 

 

2&#xff1a;变量的子串替换加正则表达式

[root&#64;localhost scripts]# num&#61;oldboy512

[root&#64;localhost scripts]# [ -z "&#96;echo "${num//[0-9]/}"&#96;" ] && echo 1 || echo 0

0

 

[root&#64;localhost scripts]# num&#61;512old512

[root&#64;localhost scripts]# [ -z "&#96;echo "${num//[0-9]/}"&#96;" ] && echo 1 || echo 0

0 #这个说明前面的结果不为0&#xff0c;即有非数字字符

 

[root&#64;localhost scripts]# num&#61;521

[root&#64;localhost scripts]# [ -z "&#96;echo "${num//[0-9]/}"&#96;" ] && echo 1 || echo 0

1 #这个说明前面的结果去掉数字后为0&#xff0c;即没有非数字字符

 

 

3&#xff1a;变量的子串替换加正则表达式(特殊判断思路)

思路&#xff1a;如果num长度不为0&#xff0c;并且把num中的非数字部分删除&#xff0c;然后看结果是不是等于num本身&#xff0c;如果两者都成立就是数字。

-z “$num” #如果num长度不为0表达式“$num” &#61;"${num//[^0-9]/}" #把num中的非数字部分删除&#xff0c;然后结果是不是等于num本身&#xff0c;如果两者都成立就是数字。

 

完整表达式&#xff1a;

[root&#64;localhost scripts]# [ -n "$num" -a "$num" &#61; "$num//[^0-9]/" ] && echo "it is num"

 

 

4&#xff1a;expr计算判断

expr $1 &#43; 0>/dev/null 2>&1 #把变量和整数相加看是否成功执行[ $? -eq 0 ] && eccho init

 

 

范例5&#xff1a;通过read读入变量方式的多分支if语句比较整数大小

[root&#64;localhost scripts]#cat if-multi.sh#!/bin/bash#this scripts is created by oldboy#fun:compare two numread -t 10 -p "pls input two num:" a bif [ $a -gt $b ];thenecho "yes,$a > $b"elif [ -eq $b ];thenecho "yes,$a&#61;$b"elseecho "yes,$a<$b"fi

 

 

另一种写法&#xff1a;用(())代替[]

[root&#64;localhost scripts]#cat if-multi.sh#!/bin/bash#this scripts is created by oldboy#fun:compare two numread -t 10 -p "pls input two num:" a bif (( $a > $b ));thenecho "yes,$a > $b"elif [ -eq $b ];thenecho "yes,$a&#61;$b"elseecho "yes,$a<$b"fi

 

特别提示&#xff1a;一般生产运维中的脚本&#xff0c;使用read的方式很少&#xff0c;除非为用户写交互式程序脚本。一般为传参或者定义变量的方式。

范例6&#xff1a;生产环境监控MySQL服务的实战例子

问题描述&#xff1a;监控MySQL服务是否正常启动&#xff0c;如果没有正常启动&#xff0c;就启动MySQL服务。这里需要大家实现准备MySQL服务的基本环境。

 

1&#xff1a;本方法的实现思路是过滤出MySQL端口3306进行判断。具体脚本如下&#xff1a;

[root&#64;localhost script]# cat check_db.sh#!/bin/bash###portNum&#61;&#96;netstat -lnt | grep 3306|awk -F &#39;[ :]&#43;&#39; &#39;{print $5}&#39;&#96; #这里的思路不是最佳的if [ #portNum -eq 3306 ];then #这里的判断最好用字符串判断的语法&#xff1b;假如端口不存在&#xff0c;显示[: -eq: unary operator expectedecho "db is running"else/data/3306/mysql restart #这是多实例MySQL启动脚本fi

 

思考&#xff1a;本脚本的好处和局限是什么&#xff1f;

或者&#xff1a;

[root&#64;localhost script]# cat check_db.sh

#!/bin/bash###portNum&#61;&#96;netstat -lnt | grep 3306|awk -F &#39;[ :]&#43;&#39; &#39;{print $5}&#39;&#96;if [ $portNum -eq 3306 ];thenecho "db is running"else/etc/init.d/mysqld restart #普通MySQL服务启动fi

 

解决-eq: unary operator expected的方法&#xff1a;不规范&#xff1b;对于多实例脚本启动有效&#xff0c;但对普通MYSQL启动问题仍然存在

[root&#64;localhost script]# cat check_db01.sh#!/bin/bash###portNum&#61;&#96;netstat -lnt | grep 3306|awk -F &#39;[ :]&#43;&#39; &#39;{print $5}&#39;&#96;if [ $portNum &#61;&#61; “3306” ];thenecho "db is running"else/data/3306/mysql restartfi

 

 

通过端口判断更简易实现脚本

[root&#64;localhost script]# cat check_db02.sh#!/bin/bash###portNum&#61;&#96;netstat -lnt | grep 3306|wc -l&#96;if [ #portNum -eq 1 ];thenecho "db is running"else/data/3306/mysql restartfi

 

2&#xff1a;本方法的实现思路是如果MySQL端口和端口同时存在&#xff0c;即认为MySQL服务正常。

&#xff08;1&#xff09;写脚本前首先人工检查MySQL服务是否OK

[root&#64;localhost script]# /data/3306/mysql start正在启动 mysqld&#xff1a;

 

[root&#64;localhost ~]# netstat -lnt | grep 3306

tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN

 

[root&#64;localhost script]# ps -ef|grep mysql|grep -v grep|wc -l

2 #通过把进程转换成为行数&#xff0c;即进程个数&#xff0c;方便做判断。

 

[root&#64;localhost ~]# netstat -lnt | grep 3306|wc -l

1 #通过把端口转换为行数&#xff0c;即端口个数&#xff0c;方便做判断

 

提示&#xff1a;根据以上结果可以知道MySQL服务是正常的&#xff08;多数情况下&#xff09;。

 

&#xff08;2&#xff09;实际的脚本监控内容

 

方法1&#xff1a;

[root&#64;localhost script]# cat check_db03.sh#!/bin/bash###portNum&#61;&#96;netstat -lnt | grep 3306|wc -l&#96;mysqlProcessNum&#61;&#96;ps -ef|grep mysql|grep -v grep|wc -l&#96;if [ #portNum -eq 1 -a $mysqlProcessNum -eq 2 ];thenecho "db is running"else/data/3306/mysql restartfi

 

或者

[root&#64;localhost script]# cat check_db03.sh#!/bin/bash###portNum&#61;&#96;netstat -lnt | grep 3306|wc -l&#96;mysqlProcessNum&#61;&#96;ps -ef|grep mysql|grep -v grep|wc -l&#96;if [ #portNum -eq 1 ] && [ $mysqlProcessNum -eq 2 ];thenecho "db is running"else/data/3306/mysql restartfi

 

 

方法2&#xff1a;

[root&#64;localhost script]# cat if-judge-db0.sh#!/bin/bash###MYSQL&#61;/data/3306/mysqlLogPath&#61;/tmp/mysql.logportNum&#61;&#96;netstat -lnt | grep 3306|wc -l&#96;mysqlProcessNum&#61;&#96;ps -ef|grep mysql|grep -v grep|wc -l&#96;if [ #portNum -eq 1 ] && [ $mysqlProcessNum -eq 2 ];thenecho "db is running"else$MYSQL start >$LogPathsleep 10portNum&#61;&#96;netstat -lnt | grep 3306|wc -l&#96;mysqlProcessNum&#61;&#96;ps -ef|grep mysql|grep -v grep|wc -l&#96;if [ #portNum -ne 1 ] && [ $mysqlProcessNum -ne 2 ];thenwhile truedokillall mysqld >/dev/null 2>&1[ $? -ne 0 ] && breaksleep 1done$MYSQL start >>$LogPath && status&#61;"successful" || status&#61;"failure"mail -s "mysql startup status is $status" 1092327070&#64;qq.com < $LogPathfifi

 

 

3&#xff1a;本方法的实现思路是&#xff1a;模拟web服务器&#xff0c;通过mysql账户连接mysql&#xff0c;然后根据返回命令状态或返回内容确认mysql是否正常&#xff08;推荐&#xff09;

&#xff08;1&#xff09;手动检查&#xff08;写脚本之前都离不开手工检查&#xff09;&#xff1a;

 

[root&#64;localhost script]# mysql -uroot -p &#39;oldboy&#39; -S /data/3306/mysql.sock -e "select version();"

 

&#xff08;1&#xff09;简单的脚本实现&#xff1a;

 

1&#xff1a;

 

 2&#xff1a;

[root&#64;localhost script]# cat check_db.sh
#
!/bin/bash
###
mysqlStatus
&#61;&#96;mysql -uroot -p &#39;oldboy&#39; -S /data/3306/mysql.sock -e "select version();" >& /dev/null&#96;if [ $? -eq 0 ];thenecho "db is running"
else/data/3306/mysql restart
fi

 

 

 复杂点的脚本实现&#xff1a;

 

#!/bin/bash
###
MYSQL
&#61;/data/3306/mysql
LogPath
&#61;/tmp/mysql.log
mysqlStatus
&#61;&#96;mysql -uroot -p &#39;oldboy&#39; -S /data/3306/mysql.sock -e "select version();" >&/dev/null&#96;if [$? -eq 0 ];then
echo
"db is running"
exit
0
else$MYSQL start >$LogPathsleep 10mysqlStatus&#61;&#96;mysql -uroot -p &#39;oldboy&#39; -S /data/3306/mysql.sock -e "select version();" >&/dev/null&#96;if [ $? -ne 0 ];thenwhile truedo killall mysqld >/dev/null 2>&1[ $? -ne 0 ] && breaksleep 1done$MYSQL start >>$LogPath && status&#61;"successful" || status&#61;"failure"mail -s "mysql startup status is $status" 12345678&#64;qq.com < $LogPathfi
fi

 

 

 

 

4&#xff1a;更专业的监控数据库生成脚本解决方案

#!/bin/bash
###
MYSQL
&#61;/data/3306/mysql
LogPath
&#61;/tmp/mysql.log
mysqlStatus
&#61;&#96;mysql -uroot -p &#39;oldboy&#39; -S /data/3306/mysql.sock -e "select version();" >&/dev/null&#96;if [$? -eq 0 ];thenecho "db is running"
else[ -x $MYSQL ] && $MYSQL start >$LogPathsleep 10mysqlStatus&#61;&#96;mysql -uroot -p &#39;oldboy&#39; -S /data/3306/mysql.sock -e "select version();" >&/dev/null&#96;if [ $? -ne 0 ];thenwhile truedo killall mysqld >/dev/null 2>&1[ $? -ne 0 ] && breaksleep 1done[ -x $MYSQL ] && $MYSQL start >>$LogPath && status&#61;"successful" || status&#61;"failure"mail -s "mysql startup status is $status" 1092327070&#64;qq.com < $LogPathfi
fi

 

转:https://www.cnblogs.com/zhongguiyao/p/8983649.html



推荐阅读
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 【shell】网络处理:判断IP是否在网段、两个ip是否同网段、IP地址范围、网段包含关系
    本文介绍了使用shell脚本判断IP是否在同一网段、判断IP地址是否在某个范围内、计算IP地址范围、判断网段之间的包含关系的方法和原理。通过对IP和掩码进行与计算,可以判断两个IP是否在同一网段。同时,还提供了一段用于验证IP地址的正则表达式和判断特殊IP地址的方法。 ... [详细]
  • 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... [详细]
  • LVS实现负载均衡的原理LVS负载均衡负载均衡集群是LoadBalance集群。是一种将网络上的访问流量分布于各个节点,以降低服务器压力,更好的向客户端 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了Perl的测试框架Test::Base,它是一个数据驱动的测试框架,可以自动进行单元测试,省去手工编写测试程序的麻烦。与Test::More完全兼容,使用方法简单。以plural函数为例,展示了Test::Base的使用方法。 ... [详细]
  • 本文介绍了在Mac上安装Xamarin并使用Windows上的VS开发iOS app的方法,包括所需的安装环境和软件,以及使用Xamarin.iOS进行开发的步骤。通过这种方法,即使没有Mac或者安装苹果系统,程序员们也能轻松开发iOS app。 ... [详细]
  • html结构 ... [详细]
  • Java程序员必会的40个Linux命令!
    你知道的越多,不知道的就越多,业余的像一棵小草!你来,我们一起精进!你不来,我和你的竞争对手一起 ... [详细]
  • camel_使用Camel在来自不同来源的Solr中索引数据
    camelApacheSolr是建立在Lucene之上的“流行的,快速的开源企业搜索平台”。为了进行搜索(并查找结果),通常需要从不同的源(例如内容管理 ... [详细]
  • linux 循环 cpu使用率脚本,Linux Shell脚本监视CPU利用率,达到设置的CPU利用率时发送电子邮件...
    有很多开源监控工具可用于监控Linux系统性能,当系统达到给定的阈值限制时,它将发送电子邮件警报。它监视CPU利用率、内存利用率、交换利用率、磁盘空间利 ... [详细]
  • 1.判断磁盘使用空间df-h|grep-vFile|seds%g|awk{if($580)print使用空间超过了80%:,$6}或#!binbash#Filename:di ... [详细]
  • http:blog.sina.com.cnsblog_491529d60100061h.html安装完SLED10后发现仍然有“热启动网络不通”的问题,原因是内核版本 ... [详细]
  • 关于中间件服务的配置管理,分为5个阶段
    这是学习笔记的第 2185 篇文章读完需要9分钟速读仅需7分钟一直以来对于中间件服务的配置管理是一个有些头疼的事情,但是头疼还不意味着解决不了,目前现状是:中间件配置的管理是手工方 ... [详细]
author-avatar
手机用户2502892647
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有