当前位置: 首页 > news >正文

【学习笔记】Shell编程---流程控制语句

最近学了好多个流程控制语句,都有点混乱了,赶紧先把各种用法记录下来!

if 语句

语法格式

if 条件测试命令串

then

        条件为真时执行的命令

else

        条件为假时执行的命令

fi

以关键字if开头,后跟条件测试表达式,条件表达式可以只包含单一的条件测试也可以是多个条件测试组成的复合表达式,关键字then可以和 if 处于同一行,也可以换行书写。处于同一行时,必须在条件表达式后添加分号“;” 当条件表达式成立时,可以执行一条或多条命令,以关键字 fi 结束。

例:当输入Y或者y时,输出“Very good!!!”;当输入N或n时,输出“Oh,I'm sorry to hear that!!!”

程序实现如下:

执行文件,结果是正确的

除了简单的if-else-fi结构,还有if-elif-else-fi结构

语法格式

if 条件表达式1 ; then

        条件表达式1成立时执行的命令

elif 条件表达式 2; then

        条件表达式2成立时执行的命令

else

        以上所有条件都不成立时执行的命令

fi

例:当输入Y或者y时,输出“Very good!!!”;当输入N或n时,输出“Oh,I'm sorry to hear that!!!”;当输入其他非Y/y/N/n的输入时,输出“Wrong answer!!!”

case条件语句

语法格式:

case 值 in

表达式1)命令1;;

表达式2)命令2;;

...

*)命令X

esac

case多选择语句,可以用case语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。

例:输入一个num值,当输入的num是1时,输出A+B的值......

select循环

Shell中的select语句可以将选项列表做出类似目录的形式,以交互的形式选择列表中的数据,传入select语句中的主体部分加以执行,select语句实质上也是一个循环语句,若不添加break关键字,程序将无法跳出select结构。

语法格式:

select 变量 in 列表

do

        …

break

done

例:

如果不加【break】来跳出select循环的话将会出现以下情况

for循环

  • 主要用于执行次数确定的某种操作
  • 如果事先知道循环要执行多少次,使用for循环最合适
  • 把循环变量var设为value_list 中的一个值,然后代入循环体执行,直到value_list 中的每个值都使用一遍

通常有两种形式

第一种:

for var in var_list

do

        循环体

done

第二种:

for (( 初始化操作 ; 循环表达式 ; 赋值操作 ))

do

        循环体

done

这种形式循环变量的取值一般是一个整数 ,通过控制取值的上限或下限确定循环体的执行次数

例:

#!/bin/bash

还有一个非常典型的for循环的练习,题目,打印出99乘法表,打印的排版格式如下:

可以这样写:

#!/bin/bash
for i in {1..9}
dofor ((j=1;j<=i;j++))doprintf "%d*%d=%d" $j $i $((i*j))doneecho
done

打印结果如下

while循环

while循环主要用于执行次数不确定的某种操作

while循环的工作机制是:反复执行某种有规律的操作,直到条件不成立

语法格式:

while [ 循环表达式 ]

do

        循环体

done

例:编写一个名为putnum的程序,在屏幕上输出从10到1的数字。

使用while循环计算1-100的累加值

until循环

和while循环的含义正好相反

执行顺序:当循环表达式为真时结束循环,否则一直执行循环体

语法格式:

until [ 循环表达式 ]

do

        循环体

done

例:编写一个程序,依次输出10、9、8、7、6。

相关文章:

  • 【用「概率思维」重新理解生活】
  • 深入探讨 Java 性能术语与优化实践
  • 12.1寸工业液晶屏M121XGV20-N10显示单元技术档案
  • ubuntu22.04编译PX4无人机仿真实践
  • Git命令起别名
  • Cursor开发酒店管理系统
  • 【AI论文】健康的大型语言模型(LLMs)?——评估大型语言模型对英国政府公共健康信息的掌握程度
  • 什么是序列化与反序列化
  • Kubernetes 标签和注解
  • Unity
  • [ linux-系统 ] 进程概念与基本操作
  • 【大模型】DeepResearcher:通用智能体通过强化学习探索优化
  • 嵌入式STM32学习——外部中断EXTI与NVIC的基础练习⭐
  • 大便次数与寿命有关?
  • 通过SSRF击穿内网!kali-ssrf靶场实战!
  • 基于MNIST数据集的手写数字识别(简单全连接网络)
  • 蓝桥杯 16. 外卖店优先级
  • 抖音怎么快速涨粉(抖音推流算法研究)
  • Qt多线程编程实践总结:QtConcurrent与moveToThread应用场景对比(可以说都是干货)
  • 接口(API)开发核心知识点
  • 125%→10%、24%税率暂停90天,对美关税开始调整
  • 广东早熟荔枝“抢滩”上海,向长三角消费者喊话:包甜,管够
  • 四部门:到2025年底,全国行政村5G通达率超过90%
  • 视频丨美国两名男童持枪与警察对峙,一人还试图扣动扳机
  • 图讯丨习近平出席中国-拉美和加勒比国家共同体论坛第四届部长级会议开幕式
  • 上海建筑领域绿色发展2025年工作要点发布