热门标签 | 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



推荐阅读
  • 汇总了2023年7月7日最新的网络安全新闻和技术更新,包括最新的漏洞披露、工具发布及安全事件。 ... [详细]
  • Docker安全策略与管理
    本文探讨了Docker的安全挑战、核心安全特性及其管理策略,旨在帮助读者深入理解Docker安全机制,并提供实用的安全管理建议。 ... [详细]
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
  • Jupyter Notebook多语言环境搭建指南
    本文详细介绍了如何在Linux环境下为Jupyter Notebook配置Python、Python3、R及Go四种编程语言的环境,包括必要的软件安装和配置步骤。 ... [详细]
  • 用阿里云的免费 SSL 证书让网站从 HTTP 换成 HTTPS
    HTTP协议是不加密传输数据的,也就是用户跟你的网站之间传递数据有可能在途中被截获,破解传递的真实内容,所以使用不加密的HTTP的网站是不 ... [详细]
  • 本文详细介绍了在 CentOS 7 系统中配置 fstab 文件以实现开机自动挂载 NFS 共享目录的方法,并解决了常见的配置失败问题。 ... [详细]
  • 本文分享了作者在使用LaTeX过程中的几点心得,涵盖了从文档编辑、代码高亮、图形绘制到3D模型展示等多个方面的内容。适合希望深入了解LaTeX高级功能的用户。 ... [详细]
  • 本文详细介绍如何在SSM(Spring + Spring MVC + MyBatis)框架中实现分页功能。包括分页的基本概念、数据准备、前端分页栏的设计与实现、后端分页逻辑的编写以及最终的测试步骤。 ... [详细]
  • 本文探讨了使用Python实现监控信息收集的方法,涵盖从基础的日志记录到复杂的系统运维解决方案,旨在帮助开发者和运维人员提升工作效率。 ... [详细]
  • 本文探讨了互联网服务提供商(ISP)如何可能篡改或插入用户请求的数据流,并提供了有效的技术手段来防止此类劫持行为,确保网络环境的安全与纯净。 ... [详细]
  • 本文详细介绍了如何使用C#实现不同类型的系统服务账户(如Windows服务、计划任务和IIS应用池)的密码重置方法。 ... [详细]
  • Asynchronous JavaScript and XML (AJAX) 的流行很大程度上得益于 Google 在其产品如 Google Suggest 和 Google Maps 中的应用。本文将深入探讨 AJAX 在 .NET 环境下的工作原理及其实现方法。 ... [详细]
  • 本文详细介绍了如何在ARM架构的目标设备上部署SSH服务端,包括必要的软件包下载、交叉编译过程以及最终的服务配置与测试。适合嵌入式开发人员和系统集成工程师参考。 ... [详细]
  • CentOS7通过RealVNC实现多人使用服务器桌面
    背景:公司研发团队通过VNC登录到CentOS服务器的桌面实现软件开发工作为防止数据外泄,需要在RealVNC设置禁止传输文件、访问粘贴板等策略过程&# ... [详细]
  • 本文介绍了如何使用 Gesture Detector 和 overridePendingTransition 方法来实现滑动界面和过渡动画。 ... [详细]
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社区 版权所有