Linux shell脚本3-if语句、case语句、for语句、while语句、until语句、break语句、continue语句,格式说明及程序验证

目录

1.if 控制语句

1.1 if 语句格式

1.2 程序验证

2.case语句

2.1case语句格式

2.2程序验证

2.2.1 终端先执行程序,在输入一个数

2.2.2 终端执行程序时同时输入一个预设变量

2.2.3 case带有按位或运算和通配符匹配

3.for语句

3.1for语句格式

3.2程序验证

3.2.1 for语句形式1-变量求和

3.2.2 for语句形式2-循环输出变量

3.2.3 for语句形式2-执行ls命令,循环判断该目录下的文件类型

(1)程序遍历输出该目录下的文件

(2)程序遍历判断该目录下的所有文件类型

4.while语句

4.1 while语句格式

4.2 程序验证

5.until语句

5.1 until语句格式

5.2 程序验证

6.break、continue

6.1 break

6.2 continue


1.if 控制语句

1.1 if 语句格式

格式一:
if [ 条件 1 ]; then
执行第一段程序
else
执行第二段程序
fi
格式二:
if [ 条件 1 ]; then
执行第一段程序
elif [ 条件 2 ];then
执行第二段程序
else
执行第三段程序
fi
注意:
1. [ 条件 ]  #条件与 [ ]要有空格
2.   if [ 条件 1 ]; then 也可以分为两行写,不用加 ;
        if [ 条件 1 ]
        then
3.需添加结束符号 fi

1.2 程序验证

程序:

#!/bin/bashecho "please input a number >>> "
read NUM #读取键盘输入的数字#注意:赋值时,等号两边不能加空格
#      []里面存放表达式时必须加空格echo " 判断 NUM 是否大于 50 "
#一般形式,程序只判断大于50的情况
if [ $NUM -gt 50 ];thenecho "NUM > 50"
fi  # 结束标志echo " ------ "
#程序判断大于、小于等于50的情况
echo " 判断 NUM 是否大于 50 "
if [ $NUM -gt 50 ]
thenecho "NUM > 50"
elseecho "NUM <= 50"
fiecho " 阶梯形式: "#阶梯形式,只执行一个条件
if [ $NUM -gt 50 ]
thenecho "NUM > 50"elif [ $NUM -lt 50 ]
thenecho "NUM < 50"elseecho "NUM = 50"
fiecho " 嵌套形式: "
#嵌套形式,
if [ $NUM -gt 50 ]
thenecho "NUM > 50"if [ $NUM -gt 100 ] #若NUM大于50,在判断和100的关系thenecho "NUM > 100"elseecho "NUM <= 100"fi
elif [ $NUM -eq 50 ]
thenecho "NUM = 50"
elseecho "NUM < 50"if [ $NUM -gt 30 ] #若NUM小于50,在判断和30的关系thenecho "NUM > 30"elseecho "NUM <= 30"fi
fi

运行结果:

2.case语句

2.1case语句格式

(1)shell case语句
case $变量名称 in
"第一个变量内容")
程序段一
;;  #当前语句结束符,和C语言break一样
"第二个变量内容")
程序段二
;;
*) 其它程序段
exit 1        #退出程序
esac         #case语句结束标志,和case匹配
(2)C语言case语句
switch(num)
{
case 1:执行语句1; break;
case 2:执行语句2; break;
case 3:执行语句3; break;
...
default:执行语句x; break; //以上case 语句未执行,执行该语句
}

2.2程序验证

2.2.1 终端先执行程序,在输入一个数

程序:

#!/bin/bashecho "This script will print your choice"
read num #读取键盘输入的数字case "$num" in"1")echo "your choice is one";;  #当前语句结束符"2")echo "your choice is two";;"3")echo "Your choice is three";;*) #以上case 语句未执行,执行该语句echo "Error Please try again!"		exit 1 #退出,不会打印下面的 hello world;;
esac #case语句结束标志,和case匹配echo "hello world"

运行结果;

2.2.2 终端执行程序时同时输入一个预设变量

终端执行程序时同时输入一个预设变量,该预设变量在程序中直接使用。

程序:

#!/bin/bash# 终端输入: ./xx.sh 2
# 上述输入的 ./xx.sh为预设变量 $0, 2为预设变量 $1
echo "This script will print your choice"case "$1" in"1")echo "your choice is one";;  #当前语句结束符"2")echo "your choice is two";;"3")echo "Your choice is three";;*) #以上case 语句未执行,执行该语句echo "Error Please try again!"		exit 1 #退出,不会打印下面的 hello world;;
esac #case语句结束标志,和case匹配echo "hello world"

运行结果:

2.2.3 case带有按位或运算和通配符匹配

程序:

#!/bin/bashecho "Please input your choice:"
read choicecase "$choice" in#输入 y Y yes Yes YES 5个中的一个,都会输出下面语句y | Y | yes | Yes | YES)echo "It's right";;# *是一个通配符,可以匹配任意字符并且数量不限# N* 只要是N开头的,都会执行下面的命令N* | n*)echo "It's wrong";;*) #其他条件echo "Error Please try again!"exit 1
esac

运行结果:

3.for语句

3.1for语句格式

形式一:
for (( 初始值; 限制值; 执行步阶 ))
do
程序段
done
初始值:变量在循环中的起始值
限制值:当变量值在这个限制范围内时,就继续进行循环
执行步阶:每作一次循环时,变量的变化量
declare 是 bash 的一个内建命令,可以用来声明 shell 变量、设置变量的属性。declare 也可以写作 typeset。
declare -i s 代表强制把 s 变量当做 int 型参数运算。
形式二:
for var in con1 con2 con3 ...
do
程序段
done
第一次循环时,$var的内容为con1
第二次循环时,$var的内容为con2
第三次循环时,$var的内容为con3
...
当in后面所有的值都赋值完毕并执行命令后,循环结束
注意:
for语句变量不加 $ 符号

3.2程序验证

3.2.1 for语句形式1-变量求和

在shell中,变量默认是字符串类型,未初始化时为null(空)。但在算术运算中,未初始化的变量被视为0。如果使用declare -i声明变量为整数,但未赋值,变量在算术运算中视为0,但直接echo可能显示为空。因此,严格来说,整数类型的变量默认值并不是0,但在算术表达式中会被当作0处理。

程序:

#!/bin/bash#声明sum变量是一个整数变量,准备保存整数
# declare 也可以写作 typeset
declare -i sum 
typeset -i sum1# for语句变量不加 $ 符号
for (( i=1; i<=100; i++ ))
dosum=sum+i
doneecho "The sum result is $sum"for (( i=1; i<=100; i++ ))
dosum1=sum1+i
done
echo "The sum1 result is $sum1"
运行结果:

3.2.2 for语句形式2-循环输出变量

程序:

#!/bin/bash#注意:for循环后的变量之前不能加$#for var in con1 con2 con3 ...
#第一次循环时,$var的内容为con1
#第二次循环时,$var的内容为con2
#第三次循环时,$var的内容为con3
#...
#当in后面所有的值都赋值完毕并执行命令后,循环结束for i in 1 2 3 4 5 
doecho $i
done
echo "结束"

运行结果:

3.2.3 for语句形式2-执行ls命令,循环判断该目录下的文件类型

(1)程序遍历输出该目录下的文件

程序:

#!/bin/bashfor name in `ls`
doecho " $name"echo " ---"
done

运行结果:

(2)程序遍历判断该目录下的所有文件类型

程序:

#!/bin/bashfor name in `ls`
doif [ -f $name ];then # -f 普通文件echo "$name is file"elif [ -d $name ];then  # -d 目录文件echo "$name is directory"elseecho "其他类型文件"fi
doneecho "结束"

运行结果:

与终端执行ll命令判断结果一致。

4.while语句

4.1 while语句格式

while [ condition ]
do
程序段
done
当condition 条件成立 的时候 进入while循环 ,直到condition不成立时才退出循环。
注意: [ condition ] ,condition 两边要留空格

4.2 程序验证

程序:

#!/bin/bash#声明 num变量是一个整数变量,准备保存整数
# declare 也可以写作 typeset
declare -i num
typeset -i s #声明s变量是一个整数变量echo "num= $num" #未赋值,算数运算默认为0
while [ "$num" != "101" ] #求1~100的累加和
do# echo "num= $num"s+=num;num=num+1;
doneecho "The count is $s"
echo "结束"

运行结果:

5.until语句

5.1 until语句格式

until [ condition ]
do
程序段
done
这种方式 与while恰恰相反 ,当condition 条件成立(为真) 的时候 退出循环
当condition 条件不成立(为假) 的时候 执行循环

5.2 程序验证

程序:

#!/bin/bash#声明 num变量是一个整数变量,准备保存整数
# declare 也可以写作 typeset
declare -i num
typeset -i s #声明s变量是一个整数变量echo "num= $num" #未赋值,算数运算默认为0
#until循环,是循环条件不成立,执行命令体,如果条件为真,则循环结束
#until [ "$num" = "101" ] #求1~100的累加和,num等于101时,退出循环
until [ "101" = "$num" ] #求1~100的累加和,num等于101时,退出循环
do# echo "num= $num"s+=num;num=num+1;
doneecho "The count is $s"
echo "结束"
运行结果:

6.break、continue

(1)break命令
break命令允许跳出循环。
break 通常在进行一些处理后 退出循环 或case 语句
(2)continue命令
continue 命令类似于break 命令。
只有一点重要差别,它 不会整个跳出循环 只是跳过本次循环 步骤。

6.1 break

程序:
#!/bin/bashfor ((num=1; num<=10; num++))
do	if [ $num -eq 5 ] #判断num是否等于5,等于5时退出整个循环then#break退出整个循环breakfiecho "num = $num"
doneecho "结束"

运行结果:

6.2 continue

程序:
#!/bin/bashfor ((num=1; num<=10; num++))
do	if [ $num -eq 5 ] #判断num是否等于5,等于5时退出本次循环,继续执行下次循环then#continue退出本次循环,当执行到continue的位置时,#循环下方的代码不在执行,但是接着下个循环继续执行continuefiecho "num = $num"
doneecho "结束"
运行结果:

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

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

相关文章

图解模糊推理过程(超详细步骤)

我们前面已经讨论了三角形、梯形、高斯型、S型、Z型、Π型6种隶属函数&#xff0c;下一步进入模糊推理阶段。 有关六种隶属函数的特点在“Pi型隶属函数&#xff08;Π-shaped Membership Function&#xff09;的详细介绍及python示例”都有详细讲解&#xff1a;https://lzm07.b…

001-JMeter的安装与配置

1.前期准备 下载好JMeter : https://jmeter.apache.org/download_jmeter.cgi 下载好JDK : :Java Downloads | Oracle 中国 下载图中圈蓝的JMeter和JDK就行&#xff0c;让它边下载&#xff0c;我们边往下看 2.为什么要下载并安装JDK ? JMeter 是基于 Java 开发的工具&#…

英伟达有哪些支持AI绘画的 工程

英伟达在AI绘画领域布局广泛&#xff0c;其自研工具与第三方合作项目共同构建了完整的技术生态。以下是其核心支持AI绘画的工程及合作项目的详细介绍&#xff1a; 一、英伟达自研AI绘画工具 1. GauGAN系列 技术特点&#xff1a;基于生成对抗网络&#xff08;GAN&#xff09;&…

Netty源码—4.客户端接入流程二

大纲 1.关于Netty客户端连接接入问题整理 2.Reactor线程模型和服务端启动流程 3.Netty新连接接入的整体处理逻辑 4.新连接接入之检测新连接 5.新连接接入之创建NioSocketChannel 6.新连接接入之绑定NioEventLoop线程 7.新连接接入之注册Selector和注册读事件 8.注册Rea…

2025.3.17-2025.3.23学习周报

目录 摘要Abstract1 文献阅读1.1 动态图邻接矩阵1.2 总体框架1.2.1 GCAM1.2.2 输出块 1.3 实验分析 总结 摘要 在本周阅读的文献中&#xff0c;作者提出了一种名为TFM-GCAM的模型。TFM-GCAM模型的创新主要分为两部分&#xff0c;一部分是交通流量矩阵的设计&#xff0c;TFM-GC…

生活电子类常识——搭建openMauns工作流+搭建易犯错解析

前言 小白一句话生成一个网站&#xff1f;小白一句话生成一个游戏&#xff1f;小白一句话生成一个ppt?小白一句话生成一个视频&#xff1f; 可以 原理 总体的执行流程是 1&#xff0c;用户下达指令 2&#xff0c;大模型根据用户指令&#xff0c;分解指令任务为多个细分步骤…

深入解析 Uniswap:自动做市商模型的数学推导与智能合约架构

目录 1. 自动做市商&#xff08;AMM&#xff09;模型的数学推导1.1 恒定乘积公式推导1.2 价格影响与滑点 2. Uniswap 智能合约架构解析2.1 核心合约&#xff08;Core&#xff09;2.1.1 工厂合约&#xff08;Factory&#xff09;2.1.2 交易对合约&#xff08;Pair&#xff09; 2…

高频面试题(含笔试高频算法整理)基本总结回顾20

干货分享&#xff0c;感谢您的阅读&#xff01; &#xff08;暂存篇---后续会删除&#xff0c;完整版和持续更新见高频面试题基本总结回顾&#xff08;含笔试高频算法整理&#xff09;&#xff09; 备注&#xff1a;引用请标注出处&#xff0c;同时存在的问题请在相关博客留言…

生成模型速通(Diffusion,VAE,GAN)

基本概念 参考视频https://www.bilibili.com/video/BV1re4y1m7gb/?spm_id_from333.337.search-card.all.click&vd_sourcef04f16dd6fd058b8328c67a3e064abd5 生成模型其实是主要是依赖概率分布&#xff0c;对输入特征的概率密度函数建模 隐空间&#xff08;latent space)…

Android在kts中简单使用AIDL

Android在kts中简单使用AIDL AIDL相信做Android都有所了解&#xff0c;跨进程通信会经常使用&#xff0c;这里就不展开讲解原理跨进程通信的方式了&#xff0c;最近项目换成kts的方式&#xff0c;于是把aidl也换成了统一的方式&#xff0c;其中遇到了很多问题&#xff0c;这里…

学习本地部署DeepSeek的过程(基于ollama)

DeepSeek除了支持在线调用服务接口外&#xff0c;还支持本地部署后调用本地服务&#xff0c;这样的好处是不需要api key&#xff0c;且资源独占&#xff0c;还能训练个人知识库。本文学习并记录本地部署DeepSeek的过程。   参考文献3中列出了不同模型对于电脑硬件的要求&…

文献分享: ColXTR——将ColBERTv2的优化引入ColXTR

1. ColXTR \textbf{1. ColXTR} 1. ColXTR原理 1.1. ColBERTv2 \textbf{1.1. ColBERTv2} 1.1. ColBERTv2概述 1.1.1. \textbf{1.1.1. } 1.1.1. 训练优化 1️⃣难负样本生成 初筛&#xff1a;基于 BM-25 \text{BM-25} BM-25找到可能的负样本重排&#xff1a;使用 KL \text{KL} KL…

Altium Designer数模电学习笔记

模电 电容 **退耦&#xff1a;**利用通交阻直&#xff0c;将看似直流的信号中的交流成分滤除 &#xff08;一般用在给MPU供电&#xff0c;尽量小一些&#xff0c;10nf~100nf~1uf以下&#xff09; **滤波&#xff1a;**也可以理解为给电容充电&#xff0c;让电容在电平为低时…

从指令集鸿沟到硬件抽象:AI 如何重塑手机与电脑编程语言差异——PanLang 原型全栈设计方案与实验性探索1

AI 如何跨越指令集鸿沟&#xff1f;手机与电脑编程语言差异溯源与统一路径——PanLang 原型全栈设计方案与实验性探索1 文章目录 AI 如何跨越指令集鸿沟&#xff1f;手机与电脑编程语言差异溯源与统一路径——PanLang 原型全栈设计方案与实验性探索1前言一、手机与电脑编程语言…

python 实现一个简单的window 任务管理器

import tkinter as tk from tkinter import ttk import psutil# 运行此代码前&#xff0c;请确保已经安装了 psutil 库&#xff0c;可以使用 pip install psutil 进行安装。 # 由于获取进程信息可能会受到权限限制&#xff0c;某些进程的信息可能无法获取&#xff0c;代码中已经…

C之(15)cppcheck使用介绍

C之(15)cppcheck使用介绍 Author: Once Day Date: 2025年3月23日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 全系列文章可查看专栏: Linux实践记录_Once_day的博客-CS…

Ant Design Vue Select 选择器 全选 功能

Vue.js的组件库Ant Design Vue Select 选择器没有全选功能&#xff0c;如下图所示&#xff1a; 在项目中&#xff0c;我们自己实现了全选和清空功能&#xff0c;如下所示&#xff1a; 代码如下所示&#xff1a; <!--* 参数配置 - 风力发电 - 曲线图 * 猴王软件学院 - 大强 …

CaiT (Class-Attention in Image Transformers):深度图像Transformer的创新之路

CaiT (Class-Attention in Image Transformers)&#xff1a;深度图像Transformer的创新之路 近年来&#xff0c;Transformers 模型在自然语言处理领域的成功逐渐扩展到了计算机视觉领域&#xff0c;尤其是图像分类任务中&#xff0c;Vision Transformer (ViT) 的提出打破了卷积…

Qt之MVC架构MVD

什么是MVC架构&#xff1a; MVC模式&#xff08;Model–view–controller&#xff09;是软件工程中的一种软件架构模式&#xff0c;把软件系统分为三个基本部分&#xff1a;模型&#xff08;Model&#xff09;、视图&#xff08;View&#xff09;和控制器&#xff08;Controll…

数组,指针 易混题解析(二)

目录 一.基础 1. 2. 二.中等 1. 坑 2. 3.指针1到底加什么 三.偏难 1.&#xff08;小端 x86&#xff09; 2.通过数组指针进行偏移的时候怎么偏移 3. 大BOSS &#xff08;1&#xff09;**cpp &#xff08;2&#xff09;*-- * cpp 3 &#xff08;3&#xff09;*c…