Shell之分支结构

一、if条件语句

(一)单分支结构

1、语法

# 写法一
if [条件]
    then
        指令
fi

# 写法二 分号相当于换行
if [条件];then
    指令
fi         

2、实例

  • 比较大小
#方法一
#!/bin/sh 
if [ 2 -lt 10 ]
    then
        echo "2 < 10"
fi

#方法二 []中不能使用>、<
#!/bin/sh 
if [ 2 -lt 10 ];then
        echo "2 < 10"
fi
  •  创建文件
#!/bin/sh
path=/project
file=if_file.sh
if [ ! -d $path ]
   then
     mkdir -p $path
     echo "$path is created"
fi

if [ ! -f $path/$file ]
   then
     touch $path/$file
     echo "$path/$file is created"
fi

(二)多分支结构

1、双分支结构

if [条件]
    then
        指令
else
        指令    
fi

2、多分支结构

if [条件]
    then
        指令
elif
     then  
        指令    
elif
     then  
        指令    
...
else
        指令    
fi

3、比较大小

#!/bin/sh
a=$1
b=$2

if [ $a -lt $b ]
   then
     echo "$a less than $b"
elif [ $a -gt $b ]
   then
     echo "$a more than $b"
else
   echo "$a equal $b"  
fi

通过脚本传参的方式比较大小。

二、MySQL启动脚本

该脚本主要用于监视MySQL服务是否正常启动,如果未正常启动就进行正常启动。

(一)监听MySQL服务的方式

1、法一(监听端口)

[root@localhost ~]# netstat -lntup|grep 3306
tcp6       0      0 :::3306                 :::*                    LISTEN      2023/mysqld         

2、法二(监听进程)

[root@localhost ~]# ps -ef | grep mysql
root       1536      1  0 22:28 ?        00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/usr/local/mysql/data --pid-file=/usr/local/mysql/data/localhost.localdomain.pid
mysql      2023   1536  0 22:28 ?        00:00:01 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/var/log/mysqld.log --pid-file=/usr/local/mysql/data/localhost.localdomain.pid --socket=/tmp/mysql.sock --port=3306
root       3924   3782  0 22:36 pts/0    00:00:00 grep --color=auto mysql

3、法三(判断返回状态)

通过客户端连接服务器,根据返回的状态判断MySQL服务器的状态。

# 该数据库未设置密码
[root@localhost ~]# mysql -e "select version();" &>/dev/null 
[root@localhost ~]# echo $?
0

(二)脚本

1、监听端口 

#!/bin/sh
portNum=`netstat -tunlp | grep 3306 | wc -l`
if [ $portNum -ne 1 ]
   then 
     /etc/init.d/mysqld start
else
     echo "MySQL is running..." 
fi

2、监听进程

#!/bin/sh
process=`ps -ef | grep mysql | grep -v grep | wc -l`
if [ $process -ne 2 ]
   then
     /etc/init.d/mysqld start
else
     echo "MySQL is running..." 
fi

此种方法中shell脚本名中不要带mysql关键字,执行中可以通过-x参数查看执行过程。

3、判断返回状态

#!/bin/sh
mysql -e "select version();" &>/dev/null
if [ $? -ne 0 ]
   then
     /etc/init.d/mysqld start
else
     echo "MySQL is running..." 
fi
作者:iveBoy
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
原文地址:https://www.cnblogs.com/shenjianping/p/14310886.html