Cat-God-007

导航

Shell脚本编程学习笔记(四)---- 条件判断与流程控制

本文已参与[新人创作礼]活动,一起开启掘金创作之路。

条件判断

if

单分支

if [ 理论分数越高 ];then
   拿奖机率越大
fi

双分支

if [ 理论分数越高 ];then
   拿奖机率越大
else
   工地搬砖
fi

多分支

if [ 理论分数越高 ];then
   拿奖机率越大
elif [ 如果实际操作越高 ];then
   拿奖机率越大
elif [ 如果个人修养越高 ];then
   拿奖机率越大
else
   工地搬砖
fi

例如

安装 Nginx

vi yum_nginx.sh
#!/bin/bash
# Install Nginx
# CatGod007 2022-05-22
#检查网络是否通畅
ping -c4 www.baidu.com &>/dev/null
if [ $? -eq 1 ];then
        echo "请检查网络..."
        exit 1
fi
#检查是否有Nginx的yum仓库
yum_repo=$(yum repolist|grep nginx|wc -l)
if [ $yum_repo -eq 0 ];then
        cat >/etc/yum.repos.d/nginx.repo <<-EOF
        [nginx]
        name=nginx repo
        baseurl=http://nginx.org/packages/centos/7/x86_64/
        gpgcheck=0
        enabled=1
        EOF
        yum makecache
        
elif [ $yum_repo -eq 1 ];then
        yum install nginx -y &>/dev/null
        Instal_nginx=$(rpm -q nginx|wc -l)
        if [ $Instal_nginx -eq 1 ];then
                   echo "Nginx已经安装"
        fi
        Nginx_Status=$(systemctl status nginx|grep Active|awk '{print $1 $3}')
        systemctl start nginx &>/dev/null
        if [ $? -eq 0];then
                        echo "Nginx已经启动完毕"
                        echo "Nginx当前状态是:\033[32m $Nginx_Status \033[0m"
                        break
        elif [ $? -eq 1];then          
                        echo "Nginx启动失败 \033[31m $Nginx_Status \033[0m"
                        pkill -9 httpd &>/dev/null
                        pkill -9 nginx &>/dev/null
                        systemctl start nginx
                        if [ $? -eq 0 ];then
                               echo -e "Nginx重启成功"
                               Nginx_Status=$(systemctl status nginx|grep Active|awk '{print $1 $2 $3}')
                               echo -e "Nginx当前状态 \033[32m $Nginx_Status \033[0m"
                        fi
        else
                          echo -e "Nginx再次启动失败"
                          echo -e "Nginx当前状态 $Nginx_Status"    
                              
         fi
        
else
        echo "错误超出我的认知!请手动检查一下"
fi

此案例暂未完全成功,但其中精华值得观看。

流程控制

case

操作语法如下

case 变量 in
模式 1)
    命令序列1;;
模式 2
    命令序列2;;
模式 3
    命令序列3;;
*)
    无匹配后命令序列
esac

例如

#!/bin/bash
case $1 in
     redhat)
          echo "centos"
          ;;
     centos)
          echo "redhat"
          ;;
      *)
          echo "USAGE:'basename $0' [readhat|centos]"
          exit 1
esac

案例1

安装php
#!/bin/bash
​
clear
echo "###################"
echo "---1.install php5.5####"
echo "---2.install php5.6####"
echo "---3.install php7.0####"
echo "###################"
read -p "请输入你要安装的php版本数字编号:" num
while ture
do
        case $num in
               1)
               echo "php5.5 is done..."
               break
               ;;
               2)
               echo "php5.6 is done..."
               break
               ;;
               3)
               echo "php7.0 is done..."
               break
               ;;
               *)
               read -p "请输入你要安装的php版本数字编号:" num
               ;;  
        esac
done

案例2

系统工具箱
vi commint.sh
#!/usr/bin/bash
caidan(){
        cat <<-EOF
        =======================
        h 显示命令帮助
        f 显示磁盘分区
        d 显示磁盘挂载
        m 查看内存使用
        u 查看系统负载
        a 返回到菜单
        q 退出程序
        ======================
        EOF
}
while true
do
read -p "请输入你想查看系统状态对应码[h/f/d/m/u/q]: " sys
        case $sys in
                a)
                clear
                echo "返回菜单中..."
                caidan                #运用了函数
                ;;
                h)
                clear
                echo "你想查看的命令帮助信息如下:"
                help|less
                ;;
                f)
                clear
                echo "你想查看的磁盘分区信息如下:"
                lsblk
                ;;
                d)
                clear
                echo "你想查看的磁盘挂载信息如下:"
                df -h
                ;;
                m)
                clear
                echo "你想查看的内存使用信息如下:"
                free -m
                ;;
                u)
                clear
                echo "你想查看的系统负载信息如下:"
                uptime
                ;;
                q)
                echo "正在退出中..."
                break
                ;;
                *)
                echo "Error!!!"
                exit 1
           esac
done
sh commint.sh

OIP-C (18).jpg 祝大家儿童节快乐!

感谢大家,点赞,收藏,关注,评论!

posted on 2022-06-01 09:46  CatGod007  阅读(2)  评论(0)    收藏  举报  来源