流程控制之条件判断

目录

流程控制之条件判断

2.1.if语句语法

2.1.1单分支结构

2.1.2双分支结构

2.1.3多分支结构

2.2.案例

例一:

例2:

例3:

例4:

例5:

例6:

例7:

例8:

例9:

2.3.case多条件判断

2.3.1.格式

2.3.2.执行过程

例10:


流程控制之条件判断

2.1.if语句语法

2.1.1单分支结构

# 语法1:
        if <条件表达式>
        then
        指令
        fi

#语法2:
        if <条件表达式>;then
        指令
        fi                           #  if,if 标志循环起始终止

2.1.2双分支结构

        if <条件表达式
        then
                指令序列1
        else
                指令序列2
        fi

2.1.3多分支结构

        if 条件表达式

        then
                指令序列1
        elif 条件表达式2

        then
                指令序列2
        else
                指令序列n
        fi

等价于:

        if 条件表达式1;then

                分支1

        else

                if 条件表达式2then

                        分支

                else

                        if 条件表达式nthen

                                分支

                        else

                                 分支

                        fi

                fi

        fi 

等价于:

        if 条件表达式1;then

                if 条件表达式2then

                        if 条件表达式nthen

                         else

                         if

                else

                if

        else

        if

2.2.案例

例一:

编写脚本choice1.sh,利用单分支结构实现输入2个整数,判断最大值后输出

read -p "输入整数x:" x
read -p "输入整数y:" y
max=$x            
if [ $max -le $y ] 
thenmax=$yfi
echo "最大值为$max"

注意:此时只能解决较为简单的数值比较,无法判断输入参数类型。若预实现判断类型,请查看上一篇博客

例2:

面试题: 编写脚本choice2.sh,判断当前系统的剩余内存大小,若低于100M则发送消息进
行告警

查看内存容量:[root@server ~]# free -m      注意:-h显示内容带参数

提取内存剩余容量参数:

        [root@server ~]# free -m |tr -s " " | grep Mem 
        Mem: 1935 1249 66 21 805 686
        [root@server ~]# free -m |tr -s " " | grep Mem |cut -d " " -f4
        66
编写脚本:

sun=$(free -m | tr -s " " | grep Mem | cut -d " " -f4)if [[ $sun < 100 ]]
thenecho "警告:内存容量低于100M"
elseecho "剩余内存为$sun M,空间足够"
fi

例3:

编写脚本choice3.sh,判断当前脚本的执行者身份,若不是root账户执行则输出提示,并提示立刻退出脚本执行

查看当前账户身份:(四种方法)

[root@server ~]# vim choice2.sh 
[root@server ~]# whoami

root
[root@server ~]# id -u        # 只有管理员账户uid为0
0
[root@server ~]#  echo $UID
0

[root@server ~]# echo $USER    
root                                        # 扩展:su - root 重建立当前系统的环境变量

方法一:利用uid来判断

[root@server ~]# vim choice3.sh

account=$(id -u)if [ $account -eq 0 ]
thenecho "当前脚本执行者身份为root"
elseecho "当前脚本执行者不是root,立刻退出脚本执行"fi

[root@server ~]# bash choice3.sh 
        当前脚本执行者身份为root
[root@server ~]# mv choice3.sh /         # 若要所有账号都可执行该文件则,将文件移动到根下
[root@server ~]# ls /

        afs  boot        dev  home  lib64  mnt  proc  run   srv  tmp  var
        bin  choice3.sh  etc  lib   media  opt  root  sbin  sys  usr

[root@server ~]# su fox
[fox@server root]$ bash /choice3.sh 

        当前脚本执行者不是root,立刻退出脚本执行

[fox@server root]$ su root 
        密码: 
[root@server ~]# bash /choice3.sh 
        当前脚本执行者身份为root

方法二:使用$USER命令来判断

account=$( echo $USER )if [[ $account == "root" ]]
thenecho "当前脚本执行者身份为root"
elseecho "当前脚本执行者不是root,立刻退出脚本执行"fi

使用su - root 重建立当前系统的环境变量后执行以下操作

[root@server ~]# bash /choice3.sh 
当前脚本执行者不是root,立刻退出脚本执行

例4:

编写脚本choice4.sh,实现闺年的判断

口诀:闰年:能被4整除但不能被100整除     或者    能被400整除的年份

read -p "请输入四位数年份:" year
if [ $(($year%4)) -eq 0 ] && (( $(($year%400)) != 0 )) || [ $(($year%400)) -eq  0 ]
thenecho "$year年是闰年"
elseecho "$year年是平年"
fi

[root@server ~]# bash choice4.sh 
请输入四位数年份:55
55年是平年
[root@server ~]# bash choice4.sh 
请输入四位数年份:4
4年是闰年
[root@server ~]# bash choice4.sh 
请输入四位数年份:444
444年是闰年

例5:

编写脚本choice5.sh,判断sshd是否运行

[root@server ~]# vim choice5.s
read -p "输入运行的软件名:" name
num=$(ps -ef |grep $name | grep -v grep |wc -l)
if [ $num  -gt 0 ];thenecho "程序$name正在运行!"
fi

[root@server ~]# bash choice5.sh 
输入运行的软件名:sshd
程序sshd正在运行!

解析:

通过进程查看sshd是否运行

        [root@server ~]# ps -ef |grep sshd | grep -v grep

                # 含义:查看并过滤sshd进程,查看并反向过滤grep(不包含grep)

root       33911   32991  0 19:27 pts/2    00:00:00 grep --color=auto sshd
        # 该进程为命令本身所对应的进程

[root@server ~]# ps -ef |grep sshd | grep -v grep |wc -l
7              # 过滤行数

通过端口查看sshd是否运行

[root@server ~]# netstat -lntup | grep 22

[root@server ~]# netstat -lntup | grep 22 |wc -l
2

总结:        

        [root@server ~]# ps -ef |grep  服务名称 | grep -v grep

        [root@server ~]# netstat -lntup | grep 端口号

        查看某程序是否运行

例6:

        编写脚本choice6.sh ,输入百分制成绩,判断后输出等级成绩

方法一:

[root@server ~]# vim choice6.sh

read -p "请输入百分制成绩:" scoreif [ -z $score ];thenecho "未输入数字,请重新输入!"
elif [ $score -gt 100 ];thenecho "请输入百分制成绩!"
elif [ $score -ge 90 -a $score -le 100 ];thenecho "A"
elif [ $score -ge 80 ];thenecho "B"
elif [ $score -ge 70 ];thenecho "C"
elif [ $score -ge 60 ];thenecho "D"
elif [ $score -gt 0 ];thenecho "E"
elif [ $score -eq 0 ];thenecho "宝宝真棒!!!!!"
else [ $score -lt 0 ];thenecho "请输入百分制成绩!!!"
fi

[root@server ~]# bash choice6.sh 
请输入百分制成绩:120
请输入百分制成绩!
[root@server ~]# bash choice6.sh 
请输入百分制成绩:100    
A
[root@server ~]# bash choice6.sh 
请输入百分制成绩:60
D
[root@server ~]# bash choice6.sh 
请输入百分制成绩:34
E
[root@server ~]# bash choice6.sh 
请输入百分制成绩:0
宝宝真棒!!!!!
[root@server ~]# bash choice6.sh 
请输入百分制成绩:-1
请输入百分制成绩!!!!
[root@server ~]# bash choice6.sh 
请输入百分制成绩:
未输入数字,请重新输入!

方法二:

read -p "请输入百分制成绩:" scoreif [ -z $score ];thenecho "为输入数字,请重新输入!"
elif [ $score -lt 0 -o $score -gt 100 ];thenecho "成绩有误,重新输入成绩!"
elif [ $score -ge 90 -a $score -le 100 ];thenecho "A"
elif [ $score -ge 80 ];thenecho "B"
elif [ $score -ge 70 ];thenecho "C"
elif [ $score -ge 60 ];thenecho "D"
elif [ $score -gt 0 ];thenecho "E"
else [ $score -eq 0 ];thenecho "宝宝真棒!!!!!"
fi

请输入百分制成绩:123
成绩有误,重新输入成绩!
[root@server ~]# bash  choice66.sh
请输入百分制成绩:-1  
成绩有误,重新输入成绩!

例7:

编写脚本choice7.sh,判断主机的cpu品牌

计算机CPU信息储存位置:

        [root@server ~]# cat  /proc/cpuinfo                 # vendor_id  cpu品牌对应字段

[root@server ~]# grep "vendor_id" /proc/cpuinfo  |uniq  |cut -d " " -f2
GenuineIntel                                # 截取CUP信息

[root@server ~]# vim choice7.sh

vendor=$(grep "vendor_id" /proc/cpuinfo | uniq |cut -d " " -f2)if [ $vendor == GenuineIntel ];thenecho "Inter"
elif [ $vendor == GenuineAMD ];thenecho "AMD"
elseecho "nukonw"
fi

[root@server ~]# bash choice7.sh
Inter

例8:

编写脚本choice8.sh,检测主机是否存活

        一般通过ping来实现测试的。开启另一台虚拟设备Node1

[root@server a1]# vim choice8.sh

read -p "请输入你需要测试的主机地址:" IP
ping -c 2 -w 3 $IP  &> /dev/nullif [ $? -eq 0 ];thenecho "主机$IP已经运行"
elseecho "主机$IP没有正常运行"fi

[root@server a1]# bash choice8.sh 
请输入你需要测试的主机地址:192.168.17.129
主机192.168.17.129已经运行

[root@server a1]# bash choice8.sh 
请输入你需要测试的主机地址:192.168.17.130
主机192.168.17.130没有正常运行

#  上例修改,使用循环测试多台主机,存活的主机显示应用高亮的颜色显示

for IP in 192.168.17.{128..135}
do
#read -p "请输入你需要测试的主机地址:" IPping -c 2 -w 3 $IP  &> /dev/nullif [ $? -eq 0 ];thenecho -e "\e[1;31m 主机$IP已经运行\e[0m"elseecho "主机$IP没有正常运行"fi
done

测试结果:

例9:

        编写脚本choice9.sh,根据用户的输入内容,判断是数字、字母、其它字符

[root@server a1]# vim choice9.sh 

read -p "请输入字母、数字或其他字符:" strif echo $str | grep [a-zA-Z] &> /dev/null;thenecho "输入字符为字母!"
elif    echo $str | grep  [0-9] &> /dev/null;thenecho "输入字符为数字!!"
elseecho "输入结果为其他字符!!!"
fi

[root@server a1]# bash choice9.sh 
请输入字母、数字或其他字符:123456
输入字符为数字!!
[root@server a1]# bash choice9.sh 
请输入字母、数字或其他字符:asdffg
输入字符为字母!
[root@server a1]# bash choice9.sh 
请输入字母、数字或其他字符:[]\

输入结果为其他字符!!!

2.3.case多条件判断

2.3.1.格式

case  变量名  in
        值1)        # 入口数据
          指令1

        ;;
        值2)        # 入口数据
          指令2

        ;;
        值3)        # 入口数据
          指令3

        ;;

        *)
        默认
esac

注意:# 将变量名拿到值1、值2、值3中做等于比较,case做不了除等于以外的比较。

              等于哪一个值,就执行对应的指令。;;表示结束 。

              若都没有匹配上,则会自动匹配*),并执行对应的默认命令

2.3.2.执行过程

case语句会将该变量的值与 括号中的值相比较,如果与某个值相等,则执行对应语句。

当遇到“;;”符号时,就跳出case语句,执行esac语句后面的语句。
如果没有与任何一个值相匹配,则执行*)后面的一组语句

例10:

        编写脚本choice10.sh,对上例6的百分制成绩判断等级成绩进行改写

[root@server a1]# vim choice10.sh

read -p "请输入百分制成绩:" scorecase $score in9[0-9]|100)echo "等级A";;8[0-9])echo "等级B";;6[0-9]|7[0-9])echo "等级C";;[0-9]|[1-5][0-9])echo "等级D";;*)echo "请输入百分制成绩!!谢谢!"
esac

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/217369.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ArcGIS for Android开发引入arcgis100.15.2

最后再点击同步即可&#xff01;&#xff01;&#xff01;

oracle aq java jms使用(数据类型为XMLTYPE)

记录一次冷门技术oracle aq的使用 版本 oracle 11g 创建用户 -- 创建用户 create user testaq identified by 123456; grant connect, resource to testaq;-- 创建aq所需要的权限 grant execute on dbms_aq to testaq; grant execute on dbms_aqadm to testaq; begindbms_a…

基于Spring Boot、Mybatis、Redis和Layui的企业电子招投标系统源码实现与立项流程

招投标管理系统是一款适用于招标代理、政府采购、企业采购和工程交易等领域的企业级应用平台。该平台以项目为主线&#xff0c;从项目立项到项目归档&#xff0c;实现了全流程的高效沟通和协作。通过该平台&#xff0c;用户可以实时共享项目数据信息&#xff0c;实现规范化管理…

【数据结构入门精讲 | 第一篇】打开数据结构之门

数据结构与算法是计算机科学中的核心概念&#xff0c;也与现实生活如算法岗息息相关。鉴于全网数据结构文章良莠不齐且集成度不高&#xff0c;故开设本专栏&#xff0c;为初学者提供指引。 目录 基本概念数据结构为何面世算法基本数据类型抽象数据类型使用抽象数据类型的好处 数…

微信小程序:模态框(弹窗)的实现

效果 wxml <!--新增&#xff08;点击按钮&#xff09;--> <image classimg src"{{add}}" bindtapadd_mode></image> <!-- 弹窗 --> <view class"modal" wx:if"{{showModal}}"><view class"modal-conten…

消息队列(MQ)

对于 MQ 来说&#xff0c;不管是 RocketMQ、Kafka 还是其他消息队列&#xff0c;它们的本质都是&#xff1a;一发一存一消费。下面我们以这个本质作为根&#xff0c;一起由浅入深地聊聊 MQ。 01 从 MQ 的本质说起 将 MQ 掰开了揉碎了来看&#xff0c;都是「一发一存一消费」&…

java实现冒泡排序及其动图演示

冒泡排序是一种简单的排序算法&#xff0c;它重复地遍历要排序的数列&#xff0c;一次比较两个元素&#xff0c;如果它们的顺序错误就把它们交换过来。重复这个过程直到整个数列都是按照从小到大的顺序排列。 具体步骤如下&#xff1a; 比较相邻的两个元素&#xff0c;如果前…

世界5G大会

会议名称:世界 5G 大会 时间:2023 年 12 月 5 日-12 月 8 日 地点:河南郑州 一、会议简介 世界 5G 大会,是由国务院批准,国家发展改革委、科技部、工 信部与地方政府共同主办,未来移动通信论坛联合属地主管厅局联合 承办,邀请全球友好伙伴共同打造的全球首个 5G 领域…

Spring Boot 3 整合 WebSocket (STOMP协议) 和 Vue 3 实现实时通信

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f33a; 仓库主页&#xff1a; Gitee &#x1f4ab; Github &#x1f4ab; GitCode &#x1f496; 欢迎点赞…

家政服务小程序预约上门,让服务更便捷

随着人们生活节奏的加快&#xff0c;家政服务行业越来越受到人们的欢迎。为了满足市场需求&#xff0c;提高服务质量&#xff0c;家政公司需要开发一款预约上门的家政服务小程序。本文将详细介绍如何制作一个预约上门的家政服务小程序。 一、登录乔拓云网后台 首先&#xff0c…

基于vue实现的疫情数据可视化分析及预测系统-计算机毕业设计推荐django

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

Appium自动化常用adb操作封装

一、前置说明 在Appium自动化中&#xff0c;经常需要使用adb命令与设备进行交互&#xff0c;所以有必要把常用的adb操作封装成一个类 二、代码实现 import os import platform import re import subprocessfrom common import path from common.exception import AndroidSDK…

语音识别功能测试:90%问题,可以通过技术解决

现在市面上的智能电子产品千千万&#xff0c;为了达到人们使用更加方便的目的&#xff0c;很多智能产品都开发了语音识别功能&#xff0c;用来语音唤醒进行交互&#xff1b;另外&#xff0c;各大公司也开发出来了各种智能语音机器人&#xff0c;比如小米公司的“小爱”&#xf…

DHCP—动态主机配置协议

动态主机配置协议DHCP&#xff08;Dynamic Host Configuration Protocol&#xff0c;动态主机配置协议&#xff09;是RFC 1541&#xff08;已被RFC 2131取代&#xff09;定义的标准协议&#xff0c;该协议允许服务器向客户端动态分配IP地址和配置信息。 DHCP协议支持C/S&#x…

外汇天眼:Coinbase国际交易所将启动现货市场

Coinbase宣布了Coinbase国际交易所扩张的下一阶段——退出符合条件客户的非美国现货市场。 这一最新发展旨在满足Coinbase全球用户群体的独特需求和需求&#xff0c;同时强化其扩大国际访问可信产品和服务的战略使命。 Coinbase国际交易所现货交易的推出和扩展将分阶段进行。1…

vite+vue3+electron搭建项目

编辑器使用vscode&#xff0c;打开一个空文件夹 第一步 初始化vite项目 初始化vite项目&#xff0c;命令 npm init vite 第二步 下载依赖 进入新建的项目&#xff0c;下载依赖&#xff0c;命令 cd vite-projec npm i第三步 使用cnpm下载 electron依赖 新建一个终端&#…

05 python数据容器

5.1 数据容器认识 5.2 python列表 5.2.1 列表的定义 演示数据容器之&#xff1a;list 语法&#xff1a;[元素&#xff0c;元素&#xff0c;....] #定义一个列表List List [itheima,uityu,gsdfg] List1 [itheima,6666,True] print(List) print(List1) print(type(List)) pr…

综合实验:期末

实验要求&#xff1a; 一&#xff0e;物理连接 实验分2个组进行&#xff0c;使用思科模拟软件。每个同学模拟两个组。每个组选用一台路由器、一台三层交换机和一台二层交换机。要求按下图拓扑进行连接。如下图&#xff1a;最上端设备为核心交换机&#xff0c;按老师要求配置&a…

实验:BGP配置

1.实验目的&#xff1a; 本实验旨在掌握BGP协议的基本概念和配置方法&#xff0c;以及使用Packet Tracer模拟网络环境进行BGP配置的方法。 2.实验要求&#xff1a; 理解BGP协议的基本概念和原理&#xff1b;掌握BGP协议的配置方法&#xff1b;能够使用Packet Tracer模拟网络…

2019年第八届数学建模国际赛小美赛B题数据中心冷出风口的设计解题全过程文档及程序

2019年第八届数学建模国际赛小美赛 B题 数据中心冷出风口的设计 原题再现&#xff1a; 这是数据中心空调设计面临的一个问题。在一些数据中心&#xff0c;计算机机柜是开放的&#xff0c;在一个房间里排列成三到四排。冷却后的空气通过主管进入房间&#xff0c;并分为三到四个…