选择结构if 只有条件判断结果为真时才执行相应的操作
循环结构
for、while/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 ]
thenif [ $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