# Shell 流程控制 - if-case

# 1.if 判断语句

# 1.1 什么是 if

if 就是模仿人类的判断来进行的,但它没有人类那么有情感,只有 True 和 False 这两种结果。

# 1.2 为何要使用 if
  • 当我们在写程序的时候,经常需要对上一步的执行结果进行判断,那么判断就需要使用 if 语句来实现;
  • if 语句在我们程序中主要就是用来做判断的;
  • 不管大家以后学习什么语言,以后只要涉及到判断的部分,大家就可以直接拿 if 来使用;
  • 不同的语言之间的 if 只是语法不同,原理是相同的。
# 1.3 if 的基础语法
# 1.3.1 单分支结构
# 单分支代码示例
if [ $1 -eq $2 ];then
   echo "ok"
fi
# 1.3.2 双分支结构
# 双分支代码示例
if [ $1 -eq $2 ];then
    echo "ok!"
else 
    echo "error!"
fi
# 1.3.3 多分支结构
# 多分支结构
if [ 如果你有房 ];then
    我就嫁给你
elif [ 你有车 ];then
    我就嫁给你
elif [ 你有钱 ];then
    我就嫁给你
else
    再见
fi
# 1.4 if 分支场景
# 1.4.1 单分支脚本案例

需求:判断当前用户是不是 root,如果不是那么返回 ERROR

[root@client ~]# cat if-1.sh
if [ $USER != 'root' ];then
    echo "ERROR"
    exit 1
fi
# 1.4.2 双分支脚本案例

需求:判断当前登录用户是管理员还是普通用户

  • 如果是管理员输出 hey admin
  • 如果是普通用户输出 hey guest
[root@client ~]# cat if-2.sh
if [ $USER == 'root' ];then
    echo "hey admin"
else
    echo "hey guest"
fi
# 1.4.3 多分支脚本案例

需求:通过脚本传入两个参数,进行整数关系比较。

比如: if.sh [1 2 | 2 2 | 2 3],请使用双分支和多分支两种方式实现。

[root@client ~]# cat if-1.sh 
#!/usr/bin/bash
# 双分支 (嵌套)
if [ $1 -eq $2 ];then
    echo "$1 = $2"
else
    if [ $1 -gt $2 ];then
        echo "$1 > $2"
    else
        echo "$1 < $2"
    fi 
fi

多分支结构实现

[root@client ~]# cat if-1.sh 
#!/usr/bin/bash
if [ $1 -eq $2 ];then
    echo "$1 = $2"
elif [ $1 -gt $2 ];then
    echo "$1 > $2"
else
    echo "$1 < $2"
fi
# 1.5 if 基于文件比较

if 语句中的文件比较

  • -e:如果文件或目录存在则为真
  • -s:如果文件存在且至少有一个字符则为真
  • -d:如果文件存在且为目录则为真
  • -f:如果文件存在且为普通文件则为真
  • -r:如果文件存在且可读则为真
  • -w:如果文件存在且可写则为真
  • -x:如果文件存在且可执行则为真
# 1.5.1 备份脚本案例 1

需求 1:备份文件至 /backup/system/filename-2019-10-29,如果该目录不存在则自动创建。

  • 1. 源文件,让用户手动输入;
  • 2. 如果备份文件存在则继续,如果备份文件不存在则提示 No such file,然后退出;
  • 3. 如果备份文件不为空则继续,如果备份文件为空则提示 "This is file empty",然后退出;
  • 4. 目标位置:/backup/system/ 判断, 判断该目录是否存在,如果不存在则创建;
[root@client ~]# cat if-3.sh 
#!/usr/bin/bash
Dest_Dir=/backup/system/
Date=$(date +%F)
read -p "请输入你要备份的文件: " src_file
#1. 判断文件是否存在
if [ ! -f ${src_file} ];then
    echo "${src_file} is not found.."
    exit	
fi
#2. 判断文件是否为空,如果为空就不用备份,退出即可
if [ ! -s ${src_file} ];then
    echo "${src_file} Content Null..."
    exit	
fi
read -p " 是否将 ${src_file} 文件备份到 ${Dest_Dir}/filename-${Date}  [ yes | no ]" Action
#3. 判断目标的目录是否存在
if [ ! -d ${Dest_Dir} ];then
    mkdir -p ${Dest_Dir}
fi
#4. 执行备份操作
if [ $Action == "yes" ];then
    cp -rp $src_file $Dest_Dir/filename-${Date}
fi
# **1.5.2 ** 为执行脚本添加锁
[root@client ~]# cat if-4.sh 
#!/usr/bin/bash
#1. 判断是否存在锁
if [ -f /tmp/test.lock ];then
    echo "该脚本正在运行,请稍后再试..."
    exit
fi
#2. 加锁
touch /tmp/test.lock
#3. 业务逻辑
sleep 20
    
#4. 解锁
if [ -f /tmp/test.lock ];then
    rm -f /tmp/test.lock
fi
# 1.6 if 基于整数比较

if 语句中的整数比较 [整数 1 操作符 整数 2]

  • -eq:等于则条件为真,示例:[1 -eq 10]
  • -ne:不等于则条件为真,示例:[1 -ne 10]
  • -gt:大于则条件为真,示例:[1 -gt 10]
  • -lt:小于则条件为真,示例:[1 -lt 10]
  • -ge:大于等于则条件为真,示例:[1 -ge 10]
  • -le:小于等于则条件为真,示例:[1 -le 10]
# 1.6.1 检查服务状态脚本

需求:用户执行脚本 sh status.sh nginx 则检查 nginx 服务的运行状态。(仅支持传递一个参数)

  • 1. 控制能传递的参数;
  • 2. 返回状态为 3,表示没有运行;
  • 3. 返回状态为 0,表示正在运行;
  • 4.. 返回状态为 4,表示暂未安装此服务;
[root@client ~]# cat if-6.sh 
#!/usr/bin/bash
#1. 控制能传递的参数个数
if [ $# -ne 1 ];then
    echo "Usage: $0 [ nginx | tomcat | php-fpm | mysql ]"
    exit
fi
#2. 业务逻辑判断
systemctl status $1 &>/dev/null
Result=$?
if [ $Result -eq 0 ];then
    echo "$1 Service Is Running..."
fi
if [ $Result -eq 3 ];then
    echo "$1 Service Is Not Running..."
fi
if [ $Result -eq 4 ];then
    echo "$1 Service Is Not Installed"
    read -p "是否需要安装 $1 这个服务 [Default yes]: " Action
    if [ ${Action:=yes} == "yes" ];then
        yum install $1 -y
    fi
fi
# 1.6.2 配置 yum 仓库脚本

需求:根据相同的系统不同版本,配置不同的 yum 源

[root@manager if]# cat if-23.sh
#!/usr/bin/bash
system_version=$(cat /etc/redhat-release  | awk '{print $(NF-1)}')
# -ne 不等于 -eq 等于
if [ ${system_version%%.*} -eq 7 ];then
    wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo &>/dev/null
    echo "CentOS ${system_version} Epel OK"
fi
if [ ${system_version%%.*} -eq 6 ];then
    wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
    echo "CentOS ${system_version} Epel OK"
fi
# 1.6.3 获取进程详情脚本

需求:获取进程的详情

  • 1. 首先要传递 1 个参数,服务的名称;
  • 2. 判断:是否存在该进程,如果不存在则警告,然后退出脚本;
  • 3. 获取进程的 pid 相关的信息;
  • 4. 获取该服务的运行状态;
  • 5. 提取运行的用户:pid,STAT,command 命令;
[root@client ~]# cat if-11.sh
#!/bin/bash
#********************************************************************
#Author     : XuYong
#Date       : 2025-09-24
#FileName   : if-11.sh
#Description: The test script
#********************************************************************
#!/usr/bin/bash
#1. 接受传递的参数总个数为 1
if [ $# -ne 1 ];then
    echo "Usage: $0 [ serviceName...]"
    exit
fi
#2. 判断服务名称是否存在对应的 id 编号
#service_status=$(ps aux | grep "$1" | grep -v grep | grep -v "$$" | wc -l)
service_status=$(pstree -l "$1" | wc -l)
tmp_file=/tmp/$1_status.txt
#3. 判断该服务是否正在运行
if [ $service_status -gt 0 ];then
    # 业务逻辑
    service_runtime=$(systemctl status $1 | grep Active | awk '{print $2,$3}'|sed 's/[()]//g')
    
    echo "当前 $1 进程的状态是:" 
    echo "$1 : $service_runtime"
    echo "****************************************************"
    echo "当前 $1 进程的详情是: "
    ps aux|grep $1 | grep -v grep | grep -v "$$" | awk 'BEGIN {printf "%-15s%-15s%-20s\n","进程的用户","进程的PID","进程的命令"} {printf "%-20s%-20d%-20s\n",$1,$2,$NF}' > ${tmp_file}
    cat ${tmp_file}
    echo "***************************************************"
    
    # 删除临时文件
    rm -f ${tmp_file}
else
    echo "该 $1 服务暂未运行..."
fi
#打印效果
[root@client ~]# sh if-11.sh nginx
当前 nginx 进程的状态是:
nginx : active running
****************************************************
当前 nginx 进程的详情是: 
进程的用户          进程的PID         进程的命令               
root                3842                /etc/nginx/nginx.conf
nginx               3843                process             
nginx               3844                process             
***************************************************
# 1.6.4 数字排序脚本

需求:输入三个数并进行升序排序

  • 1. 控制只能输入三个参数;
  • 2. 将行,转为列的显示方式;
  • 3.sort 排序;
[root@client ~]# cat if-8.sh 
#!/usr/bin/bash
if [ $# -ne 3 ];then
    echo "Error..."
    exit
fi
echo "$1 $2 $3" | xargs -n1 | sort -rn
# 1.7 if 基于字符比较

if 语句中的字符串比较 [整数 1 操作符 整数 2]

  • ==:等于则条件为真,示例 [ "a"=="a" == "b" ]
  • !=:不相等则条件为真,示例 [ "a"!="a" != "b"]
  • -z:字符串的长度为零则为真(内容空则为真),示例 [-z "$a"]
  • -n:字符串的长度不为空则为真(有内容则为真),示例 [-n "$a"]
# 1.7.1 检查执行身份是否为 root

需求:判断用户是否为 root 超级管理员;

  • 如果是则提示 hey admin
  • 如果不是则提示
[root@client ~]# cat if-9.sh
#!/bin/bash
#********************************************************************
#Author     : XuYong
#Date       : 2025-09-24
#FileName   : if-9.sh
#Description: The test script
#********************************************************************
if [ $USER ==  "root" ];then
    echo "hey admin"
else
    echo "hey guest"
fi
# 1.7.2 判断用户输入是否为空脚本
[root@client ~]# cat if-3.sh    
#!/bin/bash
read -p "请输入一个字符: " Action
if [ -z $Action ];then
    echo "请不要直接回车..."
    exit
fi
echo "你输入的是:${Action}"
# 1.7.3 检查 selinux 是否为 disabled

需求:检查是否为 disabled 状态;

  • 是:则输出 该状态已经是 disabled,不做修改;
  • 不是:则修改状态为 disabled,并返回一段提示,说 selinux 已经修改为 disabled;
[root@client ~]# cat if-10.sh  
#!/usr/bin/bash
Selinux_File=/etc/selinux/config
Selinux_status=$(grep "^SELINUX=" ${Selinux_File}  | awk -F '=' '{print $NF}')
if [ ${Selinux_status} == "disabled" ];then
    echo "你的SELINUX是关闭状态"
else
    echo "SELINUX状态是: ${Selinux_status} 不符合预期,则尝试修改中.."
    sed -i '/^SELINUX=/c SELINUX=disabled' ${Selinux_File}
    sleep 2
    echo "修改成功,SELINUX已经是Disabled关闭的"
fi
# 1.8 if 基于正则比较

if 语句中的正则比较 [[变量 =~ 正则匹配的内容]]

[["$USER" =~ ^r]]:判断用户是否已 r 开头; ro,rt,ra,root,

[[ "num"=[09]+num" =~ ^[0-9]+ ]]:判断用户输入的是否为全数字;

注意:单中括号使用正则语法会报错,bash: [:=~: binary operator expected

# 1.8.1 控制用户输入必须为整数脚本

需求:通过正则方式控制用户输入的必须是数字。

[root@client ~]# cat if-7.sh 
#!/usr/bin/bash
read -p "请输入手机号码:" num
if [[ ! ${num} =~ ^[0-9]+$ ]];then
    echo "你输入不是一个有效电话..."
    exit
fi
if [ ${#num} -ne 11 ];then
    echo "你输入电话长度不是13位..."
    exit
fi
echo "你输入的电话号码是${num}"
# 1.8.2 遍历单词筛选其中关键字脚本

需求:使用 for 循环打印一推单词,然后仅输出以 r 开头的单词。

[root@client ~]# cat if-11.sh 
#!/bin/bash
for i in r rt ttr rtt aar aaq abr root r0o
do
    # 判断
    if [[ $i =~ ^r ]];then
        echo $i
    fi
done
# 1.8.3 批量创建用户脚本

需求:编写一个创建用户的脚本。

  • 1. 提示用户输入要创建用户的前缀,必须是英文;
  • 2. 提示用户输入后缀,必须是数字;
  • 3. 如果前缀和后缀都没有问题,则进行用户创建;
  • 4. 并且密码是随机的;
[root@client ~]# cat useradd.sh 
#!/usr/bin/bash
. /etc/init.d/functions
# 让用户输入前缀名称		xuyong
# 让用户输入创建的数量		10
read -p "请输入要创建的用户名称[default: xuyong]: " UserName
read -p "请输入要创建的用户数量[default: 10]: " UserNumber
read -p "请输入要创建的密码长度[default:  8]: " PassNumber
read -p "你要创建的用户是 ${UserName:=xuyong} 随机密码 ${PassNumber:=8} 创建 ${UserNumber:=10}  ,确定创建吗? [ yes(default) | no ]: " Action
# 判断用户输入的是 yes 还是 no
if [ "${Action:=yes}" == "yes" ];then
    # 循环
    for number in $(seq ${UserNumber})
    do
        # 随机密码 - l 长度 -c 小写个数 -C 大小个数
        UserPass=$(mkpasswd -l ${PassNumber} -C 1 -c 1 )
        # 判断用户是否存在
        id "${UserName}_${number}" &>/dev/null
        if [ $? -eq 0 ];then
                    action "用户: ${UserName}_${number} is already exists.." /bin/false
        else
                    # 创建用户
                    useradd "${UserName}_${number}" &>/dev/null
                    # 设定密码
                    echo "${UserPass}" | passwd --stdin "${UserName}_${number}" &>/dev/null
                    echo "${UserName}_${number} : ${UserPass}" >> /tmp/user_pass.txt
                    action "用户: ${UserName}_${number} User creation successful" /bin/true
        fi 
    done
fi
# 1.8.4 批量删除用户脚本

需求:编写一个删除用户的脚本。

[root@client ~]# cat useradd_del.sh 
#!/usr/bin/bash
. /etc/init.d/functions
# 让用户输入前缀名称		xuyong
# 让用户输入创建的数量		10
# 使用有密码。且随机,长度 15 大写 5  小写 5 数字 3 特殊字符 2
read -p "请输入要删除的用户名称[default: xuyong]: " UserName
read -p "请输入要删除的用户数量[default: 10]: " UserNumber
read -p "你要删除的用户是 ${UserName:=xuyong} 创建 ${UserNumber:=10}  ,确定创建吗? [ yes(default) | no ]: " Action
# 判断用户输入的是 yes 还是 no
if [ "${Action:=yes}" == "yes" ];then
    # 循环
    for number in $(seq ${UserNumber})
    do
        id "${UserName}_${number}" &>/dev/null
        # 如果用户存在则为 0,不存在则为 1
        if [ $? -eq 0 ];then
            userdel "${UserName}_${number}" &>/dev/null
            action "用户: ${UserName}_${number} is delete successful" /bin/true
        else
            action "用户: ${UserName}_${number} is not found.." /bin/false
        fi 
    done
fi
# 1.8.5 批量删除目录脚本

需求:编写一个删除目录的脚本。

[root@client ~]# cat user_del_dir.sh 
#!/usr/bin/bash
. /etc/init.d/functions
home_dir=$(ls /home | xargs -n1)
for dir in ${home_dir}
do
    # 删除以 d 开头或以 x 开头的目录
    if [[ $dir =~ ^d ]] || [[ $dir =~ ^x ]];then
        rm -rf /home/$dir
        action "删除 /home/$dir delete successful" /bin/true
    fi
        sleep 0.2
done
# 1.9 if 判断相关脚本案例

需求:在每月第一天备份并压缩 /etc 目录的所有内容,存放到 /backup 目录,存放的形式 2019_04_10_etc.tar.gz,脚本名称为 fileback,

存放在 /root 的家目录下。

[root@client ~]# cat fileback.sh 
#!/usr/bin/bash
Date=$(date +%F)
Dir=/backup
Lock_File=/tmp/back.lock
Log_File=/var/log/${0}.log
Log_Format(){
    echo "$(date +%F_%T) $(hostname) $0: $1" >> ${Log_File}
}
# 1. 判断操作的用户身份
if [ ! $USER == "root" ];then
    Log_Format "请使用Root身份运行.."
    exit
else
    Log_Format "Root开始执行备份脚本---->"
fi
# 2. 加锁
if [ -f $Lock_File ];then
    echo "该脚本 $0 正在执行备份操作--->"
    exit
fi
#第一次备份时,没有锁,所以需要添加
touch $Lock_File
#3. 判断备份的目录是否存在
if [ ! -d ${Dir} ];then
    mkdir -p ${Dir}
fi
#4. 执行 tar 打包
Log_Format "Root开始执行tar命令打包---->"
sleep 2
#5. 判断打包是否成功
cd / &&  tar czf ${Dir}/${Date}_etc.tar.gz etc
if [ -f ${Dir}/$Date_etc.tar.gz ];then
    Log_Format "备份文件${Dir}/${Date}_etc.tar.gz 成功---->"
else
    Log_Format "备份文件${Dir}/${Date}_etc.tar.gz 失败---->"
fi
# 程序执行成功后记得解锁
rm -f  $Lock_File

打印日志日志示例:

[root@client ~]# cat /var/log/fileback.sh.log 
2025-09-24_18:15:28 client fileback.sh: Root开始执行备份脚本---->
2025-09-24_18:15:28 client fileback.sh: Root开始执行tar命令打包---->
2025-09-24_18:15:31 client fileback.sh: 备份文件/backup/2025-09-24_etc.tar.gz 成功---->

# 3.case 判断语句

# 3.1 什么是 case
  • case 语句和 if 多分支判断语句类似,主要用来做多条件判断;
  • 只不过 case 在 Shell 脚本中比 if 多分支条件判断更方便。
# 3.2 case 使用场景
  • 在生产环境中,我们会根据” 一个问题 “ 做多种预案,然后根据用户选择来加载不同的预案。
  • 比如服务的启停脚本,我们首先要写好启动、停止、重启的预案,然后根据用户选择来加载不同的预案。
# 3.3 case 基础语法
[root@client ~]# cat case.sh 
#!/bin/bash
#********************************************************************
#Author     : XuYong
#Date       : 2025-09-24
#FileName   : case.sh
#Description: The test script
#********************************************************************
read -p "请输入数字:" num
case $num in
    1)
        echo "1"
    ;;
    2)
        echo "2"	
    ;;
    3)
        echo "3"
    ;;	
    *)
        echo "error"
        exit
esac

case 示例: (PS: 建议先使用 if 实现如下例子)

[root@bgx shell]# cat case.sh
#!/bin/bash
cat <<eof
****************
** 1. backup **
** 2. copy **
** 3. quit **
****************
eof
read -p "Input a choose: " OP
case $OP in
    1|backup)
        echo "BACKUP......"
    ;;
    
    2|copy)
        echo "COPY....."
    ;;
        
    3|quit)
        exit
    ;;
    
    *)
        echo error!
esac
# 3.4 case 场景实践
# 3.4.1 场景 1 - 编写 nginx 启停脚本
[root@client ~]# cat nginx.sh
#!/usr/bin/bash
. /etc/init.d/functions
ngx_pid=/var/run/nginx.pid
ngx_tmp=/tmp/ngx.status
case $1 in
    start)
        # 判断服务是否存活
        if [ ! -f $ngx_pid ];then
            nginx -t &>${ngx_tmp}
            if [ $? -ne 0 ];then
                ngx_file=$(cat /tmp/ngx.status  | awk '/emerg/' | awk '{print $NF}' | awk -F ":" '{print $1}')
                ngx_line=$(cat /tmp/ngx.status  | awk '/emerg/' | awk '{print $NF}' | awk -F ":" '{print $2}')
                read -p "Nginx的 ${ngx_file} 的第 ${ngx_line} 行出现了错误,是否需要进入编辑 [ y | n ]:" Action
                if [ ${Action:=y} == "y" ];then
                    vim ${ngx_file} +${ngx_line}
                else
                    exit
                fi
            else
                # 启动
                /usr/sbin/nginx 
                # 查看进程
                ngx_process_pid=$(cat ${ngx_pid})
                ngx_process_mess=$(ps aux |grep ${ngx_process_pid} | grep -v grep|wc -l)
                if [ $ngx_process_mess -ge 1 ];then
                    action "Nginx启动成功" /bin/true
                else
                    action "Nginx启动失败" /bin/false
                fi
            
            fi
        else
            action "Nginx已启动" /bin/false
        fi	
    ;;
    
    stop)
    
    ;;
    status)
    
    ;;
    *)
        echo "Usage $0 [ start | stop | restart ]"
        exit
esac
# 3.4.2 场景 2 - 编写 rsync 启停脚本
[root@client ~]# cat rsync.sh
#!/usr/bin/bash
. /etc/init.d/functions
Rsync_Pid_File=/var/run/rsyncd.pid
start_rsync() {
            # 判断 pid 是否存在,如果存在说明服务已经启动过了
            if [ -f $Rsync_Pid_File ];then
                action "Rsync正在运行中,不用重复启动.." /bin/false
            else
                /usr/bin/rsync --daemon
                Rsync_Status=$(netstat -lntp |grep 873 | grep -w "^tcp" | wc -l)
                
                if [ $Rsync_Status -eq 1 ];then
                    action "Rsync 启动成功"  /bin/true
                else
                    action "Rsync 启动失败"  /bin/false
                fi
            fi
}
stop_rsync() {
            # 判断是否存活
            if [ -f  $Rsync_Pid_File ];then
                #停止
                kill  $(cat ${Rsync_Pid_File})
                sleep 0.5
                Rsync_Status=$(netstat -lntp |grep 873 | grep -w "^tcp" | wc -l)
                if [ $Rsync_Status -eq 0 ];then
                    action "Rsync 停止成功" /bin/true
                else
                    action "Rsync 停止失败" /bin/false
                fi
            else
                # 已经是停止状态
                action "Rsync 已经是停止状态" /bin/false
            fi
}
case $1 in
    start)
        start_rsync 
    ;;
    stop)
        stop_rsync
    ;;
    restart)
        if [ -f $Rsync_Pid_File ];then
            stop_rsync
            start_rsync
        else
            start_rsync
        fi
    ;;
    status)
        if [ -f $Rsync_Pid_File ];then
            rsync_process_id=$(cat ${Rsync_Pid_File})			
            echo ""
            echo "****************Rsync Status ****************************"
            rsync_process_message=$(ps aux|grep ${rsync_process_id} | grep -v grep)
            echo "${rsync_process_message}"
            echo "*******************************************************"
        else
            action "Rsync 暂未启动.." /bin/false
        fi
    ;;
    *)
        echo "Usage $0 [ start | status | restart | stop ]"
        exit
esac
# 3.4.3 场景 3 - 编写 LVS 启停脚本
[root@client ~]# cat lvs_rs.sh
#!/bin/bash
net_eth1=eth1:1
net_vip=172.16.1.33
net_port=80
rs_ip="172.16.1.5 172.16.1.6 172.16.1.7 172.16.1.8"
case $1 in
    start)
        #1. 配置 vip
        cat > /etc/sysconfig/network-scripts/ifcfg-${net_eth1} <<-EOF
        TYPE=Ethernet
        BOOTPROTO=none
        DEFROUTE=yes
        NAME=${net_eth1}
        DEVICE=${net_eth1}
        ONBOOT=yes
        IPADDR=${net_vip}
        PREFIX=24
        EOF
        # 启动 LVS-VIP
        ifup ${net_eth1}
        #2. 配置 ipvsadm 规则
        ipvsadm -A -t ${net_vip}:${net_port} 
        for host in ${rs_ip}
        do
            ipvsadm -a -t ${net_vip}:80 -r ${host}:${net_port}
        done
        # 3. 打印 LVS 规则
        clear
        ipvsadm -L -n 
        ;;
    stop)
        ifdown ${net_eth1}
        sleep 0.5
        rm -f /etc/sysconfig/network-scripts/ifcfg-${net_eth1}
        ipvsadm -C
        ;;
    *)
        echo "Usage $0 [ start | stop ]"
        exit
esac
# 3.4.4 场景 4 - 编写 Jar 包启停脚本
[root@client ~]# cat service_start.sh
#!/usr/bin/bash
# 描述:服务启动脚本
# by: Oldxu  Email: xuy@nf-leasing.com
#定义变量
JAR_NAME=$2
JAVA_OPTS="-Xms256m -Xmx1024m -Dspring.profiles.active=prd -Djava.security.egd=file:/dev/./urandom -Duser.timezone=GMT+08"
COUNT=$(ps -ef |grep '${JAR_NAME}' |grep -v grep|wc -l)
PID=$(pgrep -l ${JAR_NAME})
#使用说明,用来提示数据参数
usage() {
    echo "Usage: $0 stop|restart|status JARPATH/JAR_NAME"
    exit 1
}
#启动应用
start() {
    if [ "${COUNT}" -ne 0 ]; then
        echo "${JAR_NAME}正在运行,进行ID是${PID}"
    else
        echo "$正在启动{JAR_NAME}"
        nohup java ${JAVA_OPTS} -jar $2 &> /dev/null &
    fi
}
#停止应用
stop() {
    if [ "${COUNT}" != 0 ]; then
        kill -9 ${PID} &> /dev/null
        sleep 10
        echo "${JAR_NAME}已经停止"
    else
        echo "${JAR_NAME}未运行"
    fi
}
#应用状态
status () {
    if [ "${COUNT}" != 0 ]; then
        echo "${JAR_NAME}正在运行,进程ID是${PID}"
    else
        echo "${JAR_NAME}已经停止"
    fi
}
#重启应用
restart() {
    stop
    start
}
#启动参数
case "$1" in
    start)
        echo "************************Start Service************************"
        start
    ;;
    stop)
        echo "************************Stop Service************************"
        stop
    ;;	
    restart)
        echo "************************Restart Service************************"
        restart
    ;;
    status)
        echo "************************Service Status************************"
        status
    ;;
    *)
        echo "************************Script Usage************************"
        usage
        ;;
esac
此文章已被阅读次数:正在加载...更新于

请我喝[茶]~( ̄▽ ̄)~*

Xu Yong 微信支付

微信支付

Xu Yong 支付宝

支付宝