day14 02-Shell控制条件与循环详解

2023-09-18 16:38:24

1.9. 条件控制
1.9.1. if条件语句-单分支
if-else语句,是非常简单,也是非常基础的条件语句。在Java中我们已经非常熟悉它的逻辑了,在这里,我们重点关注在Shell中的语法
if [ 条件判断 ]
then
    条件成立的执行逻辑
fi

或者

if [ 条件判断 ] ; then
    条件成立的执行逻辑
fi

案例:

#!/bin/bash

A=$1
if [ $A == "stop" ]
then
    systemctl stop firewalld
fi

注意事项:

  1. if语句需要使用fi结尾,和一般语言使用大括号结尾不同。
  2. [ 条件判断 ] 就是使用test命令判断,所以中括号和条件判断之间必须有空格
  3. then后面跟符合条件之后执行的程序,可以放在[]之后,用;分隔,也可以换行写入,就不需要;了
  4. if与中括号之间必须要有空格
1.9.2. if条件语句-多分支
if [ 条件判断式1]
then
      当条件判断式1成立时,执行程序1
elif  [ 条件判断式2 ]  
then      
    当条件判断式2成立时,执行程序2
      ...省略更多条件
else
      当所有条件都不成立时,最后执行此程序
fi

案例1:

#!/bin/bash
read -p "please input your name:"  NAME
echo  $NAME
if [ $NAME == root ]
then
      echo "hello ${NAME},  welcome !"
elif [ $NAME == tom ]
then
    echo "hello ${NAME},  welcome !"
else
    echo "oh, get out here !"
fi

案例2:

编写一个坐车脚本,要求:
脚本名字: home.sh
逻辑: 从外面传入一个参数,根据参数判断: 1. 坐飞机,2. 坐火车,3. 坐火箭,4. 不回了
#!/bin/bash

CHOICE=$1
if [ $CHOICE == 1 ]
then
    echo "坐飞机"
elif [ $CHOICE == 2 ]
then
        echo "坐火车"
elif [ $CHOICE == 3 ]
then
    echo "坐火箭"
elif [ $CHOICE == 4 ]
then
    echo "不回了"
else
    echo "输入的参数有问题啊"
fi
1.9.3. case
# 在Java中,我们学习过switch-case结构。这种结构,我们可以捕获一个变量的值,对这个变量取到的某些值进行不同的处理。在Shell中,也有类似的结构,就是case。
# case命令是一个多分支的if/else命令,case变量的值用来匹配value1、value2、value3等不同的值。
# 匹配到后,则执行跟在后面的命令,直到遇到双分号为止。
# 类似于if命令,case命令使用esac作为终止符。
# case行尾必须为单词in。
# 每个分支必须以右括号结束。
# 匹配模式中可使用方括号表示一个连续的范围,如[0-9];使用竖杠符号“|”表示或。
# 最后的“\*)”表示默认模式,当使用前面的各种模式均无法匹配该变量时,将执行“*)”后的命令序列。

# case的格式

CMD=$1
case $CMD in							# case行尾必须为 变量 in,表示捕获这个变量的值
start)									# 需要匹配到的值,需要以右括号作为结尾
    echo "starting"						# 匹配到之后,执行的逻辑语句,即一个分支
    ;;									# 一个分支的逻辑,需要以;;作为结束,不会向下穿透
stop)
    echo "stopping"
    ;;
*)										# *表示以上分支都不满足的情况,类似于switch-case中的default
    echo "please using start|stop"
    ;;
esac									# case语句,需要以esac结束
1.10. 循环
1.10.1. for循环
for循环命令用来在一个列表条目中执行有限次数的命令。

比如,你可能会在一个姓名列表或文件列表中循环执行同个命令。

for命令后紧跟一个自定义变量、一个关键字in和一个字符串列表(可以是变量)。

第一次执行for循环时,字符串列表中的第一个字符串会赋值给自定义变量,然后执行循环命令,直到遇到done语句;

第二次执行for循环时,会右推字符串列表中的第二个字符串给自定义变量

依次类推,直到字符串列表遍历完。

方式一:

for N in 1 2 3 
do
      echo $N
donefor N in 1 2 3; do echo $N; donefor N in {1..3}; do echo $N; donefor N in {1,2,3}; do echo $N; done  

注意事项: {}中的数字之间不能有空格

方式二:

for ((i = 0; i <= 5; i++))
do
      echo "welcome $i times"
donefor ((i = 0; i <= 5; i++)); do echo "welcome $i times"; done

练习: 计算从1到100的和

#!/bin/bash

SUM=0
for((i=1;i<=100;i++))
do
    SUM=$(($SUM + $i))
done
echo $SUM
1.10.2. while循环
while命令根据紧跟其后的命令(command)来判断是否执行while循环,当command执行后的返回值(exit status)为0时,则执行while循环语句块,直到遇到done语句,然后再返回到while命令,判断command的返回值,当得到返回值为非0时,则终止while循环。
  • 第一种:

    while [ expression ]
    do
        command
    done
    
    # 练习: 求1-10各个数字的平方和
    
    #!/bin/bash
    num=1
    while [ $num -le 10 ]
    do
          sum=`expr $num \* $num`
          echo $sum
          num=`expr $num + 1`
    done
    
    num=1
    while [ $num -le 10 ]
    do
          sum=$(( $num * $num ))
          echo $sum
          num=$(( $num + 1 ))
    done
    
  • 第二种:

    while  ((  expression  ))
    do
    commanddone
    
    # 练习: 求1-10各个数字的平方和
    
    #!/bin/bash
    i=1
    while (( i<= 10 ))
    do
        sum=$(( $i * $i ))
        echo $sum
        i=$(( $i + 1 ))
    done
    
更多推荐

视频画面噪点太多难处理?AI工具一键消除

很多时候我们下载或者录制的视频画面都会有带噪点的问题,噪点就像密密麻麻的小颗粒,这样非常影响观看,这个时候我们需要使用视频降噪功能,视频降噪可以提升视频内容的保真。那么视频画面噪点如何处理呢?视频噪点,也称为视频噪声,是指由于各种原因导致的视频图像中出现的不规则的杂点、花点或小斑点。这些噪点会严重影响视频的观感和质量,

Java基于SpringBoot的校园博客系统

第一章:简介本系统主要根据博主的需求做出分析,让博主更好的在线查看校园博客系统信息等,管理员后台管理系统数据等功能。从这个系统的操作来说,能够有效的进行信息的添加、修改、查询、删除一些校园博客系统信息,在一定的程序上能够实现了自动化。设计该系统的主要目的是为实现通过网络来减少人力和财力的投入,不断提高工作效率。文章首发

强化学习从基础到进阶--案例与实践[7]:深度确定性策略梯度DDPG算法、双延迟深度确定性策略梯度TD3算法详解

【强化学习原理+项目专栏】必看系列:单智能体、多智能体算法原理+项目实战、相关技巧(调参、画图等、趣味项目实现、学术应用项目实现专栏详细介绍:【强化学习原理+项目专栏】必看系列:单智能体、多智能体算法原理+项目实战、相关技巧(调参、画图等、趣味项目实现、学术应用项目实现对于深度强化学习这块规划为:基础单智能算法教学(g

27、Flink 的SQL之SELECT (SQL Hints 和 Joins)介绍及详细示例(2-2)

Flink系列文章1、Flink部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接13、Flink的tableapi与sql的基本概念、通用api介绍及入门示例14、Flink的tableapi与sql之数据类型:内置数据类型以及它们的属性15、Flink

安防视频/视频汇聚平台EasyCVR使用onvif探测添加设备通道详细步骤来啦!

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同,支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。音视频流媒体视频平台EasyCVR拓展性强,视频能力丰富,具体可实现视频监控直播、视频轮播、视频录像、云存储、回放与检索、智能告警、服务器集群、语音对讲、云台控制、电子地图、H.2

基于SpringBoot的甘肃非物质文化网站设计与实现

目录前言一、技术栈二、系统功能介绍用户信息管理商品分类管理申请信息管理订单信息管理三、核心代码1、登录模块2、文件上传模块3、代码封装前言现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本甘肃非物质文化网站就是在这样的大环境下诞生,其可以帮助管理者在

数据分享|R语言分析上海空气质量指数数据:kmean聚类、层次聚类、时间序列分析:arima模型、指数平滑法...

全文链接:http://tecdat.cn/?p=30131最近我们被客户要求撰写关于上海空气质量指数的研究报告。本文向大家介绍R语言对上海PM2.5等空气质量数据(查看文末了解数据免费获取方式)间的相关分析和预测分析,主要内容包括其使用实例,具有一定的参考价值,需要的朋友可以参考一下(点击文末“阅读原文”获取完整代码

K8s的网络——Underlay和Overlay网络

0.基础知识1)网络7层基础知识在网络7层协议基础里,第一层物理链路;第二层是数据链路层,在第一层的基础上引入MAC地址做数据转发。MAC地址在局域网内具有唯一性,主机A发送数据时,会向局域网内进行广播,每个主机根据mac地址自动匹配。网桥、交换机都是工作在数据链路层。由MAC地址构建的网络可以叫以太网。在网络中接入设

K8S入门前奏之VMware虚拟机网络配置

为了能在本地搭建K8S的运行服务器,在个人电脑上安装了虚拟机VMware16版本,并且在阿里巴巴开源镜像站下载了CentOS-7操作系统:阿里巴巴开源镜像站做完一些列准备工作后,在虚拟机安装完CentOS-7操作系统后,需要对VMware虚拟机网络进行配置,让其满足我们搭建K8S的要求。查看物理机ip信息命令:ipco

HTML中的<canvas>元素

聚沙成塔·每天进步一点点⭐专栏简介⭐canvas元素⭐用途⭐示例⭐写在最后⭐专栏简介前端入门之旅:探索Web开发的奇妙世界欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发者,这里都将为你提供一个系统而又亲切的学

电脑怎么取消磁盘分区?

有时候,我们的电脑会出现一个磁盘爆满,但另一个却空着,这时我们可以通过取消磁盘分区来进行调整,那么,这该怎么操作呢?下面我们就来了解一下。磁盘管理取消磁盘分区磁盘管理是Windows自带的磁盘管理工具,它位于"计算机管理"控制台中。它包括查错程序和磁盘碎片整理程序以及磁盘整理程序。它可以帮助你完成扩大分区、压缩分区、删

热文推荐