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



推荐阅读
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • 【shell】网络处理:判断IP是否在网段、两个ip是否同网段、IP地址范围、网段包含关系
    本文介绍了使用shell脚本判断IP是否在同一网段、判断IP地址是否在某个范围内、计算IP地址范围、判断网段之间的包含关系的方法和原理。通过对IP和掩码进行与计算,可以判断两个IP是否在同一网段。同时,还提供了一段用于验证IP地址的正则表达式和判断特殊IP地址的方法。 ... [详细]
  • PDO MySQL
    PDOMySQL如果文章有成千上万篇,该怎样保存?数据保存有多种方式,比如单机文件、单机数据库(SQLite)、网络数据库(MySQL、MariaDB)等等。根据项目来选择,做We ... [详细]
  • 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... [详细]
  • 基于Socket的多个客户端之间的聊天功能实现方法
    本文介绍了基于Socket的多个客户端之间实现聊天功能的方法,包括服务器端的实现和客户端的实现。服务器端通过每个用户的输出流向特定用户发送消息,而客户端通过输入流接收消息。同时,还介绍了相关的实体类和Socket的基本概念。 ... [详细]
  • LVS实现负载均衡的原理LVS负载均衡负载均衡集群是LoadBalance集群。是一种将网络上的访问流量分布于各个节点,以降低服务器压力,更好的向客户端 ... [详细]
  • 流数据流和IO流的使用及应用
    本文介绍了流数据流和IO流的基本概念和用法,包括输入流、输出流、字节流、字符流、缓冲区等。同时还介绍了异常处理和常用的流类,如FileReader、FileWriter、FileInputStream、FileOutputStream、OutputStreamWriter、InputStreamReader、BufferedReader、BufferedWriter等。此外,还介绍了系统流和标准流的使用。 ... [详细]
  • 本文介绍了使用C++Builder实现获取USB优盘序列号的方法,包括相关的代码和说明。通过该方法,可以获取指定盘符的USB优盘序列号,并将其存放在缓冲中。该方法可以在Windows系统中有效地获取USB优盘序列号,并且适用于C++Builder开发环境。 ... [详细]
  • STM32 IO口模拟串口通讯
    转自:http:ziye334.blog.163.comblogstatic224306191201452833850647前阵子,调项目时需要用到低波 ... [详细]
  • Question该提问来源于开源项目:react-native-device-info/react-native-device-info ... [详细]
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社区 版权所有