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

C高级 DAY4

一、分支语句

case ...in语句        

shell中的switch语句

case $变量名 in常量1)语句;;       ------->类似于C中break的作用,;;除了最后一条分之外,都不能省略常量2)语句;;····   常量n)语句;;*)         ------->类似于C中default,但是*表示通配所有情况,只能放在最后语句
esac    

其中常用到的条件有

1|2|3|4):满足1,2,3,4中任一个即可
[0-9]):满足0-9中任一个
[0-3]|4):满足0-3和4中的任一个   

注意:*通配所有情况,如果想使用*表示其他分支的情况,不能把*放在上面,与default不一样!

二、循环语句

在shell中,循环语句不使用{}作为作用域,使用do..done

1、while

while [ test语句 ]   ------>while test 表达式
do循环体
done

2、for

for也可以使用c语言风格的格式,或者shell风格的格式,让变量遍历字符串列表

第一种:类似于C的格式
for ((表达式1;表达式2;表达式3))
do循环体
done第二种:shell中的格式
for 变量名 in 字符串列表
do循环体
done

连续使用列表

1、seq 起始值 间隔值 终止值 ---->在终端回显,起始到终止值间的连续序列
seq 1 1 100 --->输出1-100    
seq 如果后面只有一个数,默认是终止值,起始值和间隔值默认为1
拿到seq的结果需要使用命令置换符
`seq 1 1 100`
2、{1..3} ---->展开1-3内的每一个数,中间是两个.不能多写

3、select...in

select 变量名 in 选项列表
do语句块
done

变量名会一一遍历选项列表,遍历次数个选项个数一致

执行逻辑:
会在终端打印选项列表,让用户选择,用户选择是需要选择对应的序号,
如果用户不输入直接回车,会再打印一次选项列表,
如果选择错误,变量就获取到空值

一般select与case...in结合使用

select i in linux wins macos q Q
docase $i inlinux)echo "打开的是Linux系统";;wins)echo "打开的是wins系统";;macos)echo "打开的是macos系统";;q)break;;Q)exit;;*)echo "选择错误"esac
doneecho hello world

三、辅助控制关键字

与c中跳出循环关键字相似

1、break

退出循环

break n    ------->退出n层循环
break 1    ------->1可以不写

2、continue

跳出循环

continue n   ------->退出n层本次循环
continue 1   ------->1可以不写

四、函数

由于脚本中是不存在返回值类型,所以在函数名前是function开头(可加可不加)之后形参列表没有参数

function  函数名()
{函数体return 返回值(如果实现函数时有返回值就写return)
}
shell中函数的注意事项:
1、function在定义函数时,可以加也可以不加(建议加)
2、()内不能添加任何内容,函数是否有参数根据调用来决定
3、如果函数有返回值,直接在函数的定义中写出return 
4、shell中的函数仍然满足先定义后调用的原则,shell中函数的定义和声明不能分开

外部传参不能传到函数内,只能给全局,函数传参需要的方式是

函数名 实参1 实参2 实参3 ····  (函数有参数的情况)
函数名  (没有参数)

而函数内部同样可以通过位置变量获取${n}

脚本的外部传参和函数的外部传参互不干扰:
如果在函数中使用位置变量获取到的就是函数的外部参数,
如果在脚本中使用位置变量获取到的就是脚本的外部参数,$0只能获取脚本名

当想获取函数中的返回值时,由于不像c中有类型,所以获取的方式也不一样,使用

$? 获取函数的返回值   ----->使用$?的上一条指令一定是函数的调用
$?的本质是获取到上一条指令的执行结果,

例如

#!/bin/bash
function fun()
{echo hello world
}function add()
{echo $(($1+$2))echo $0a=258return $a   #返回值只能返回0-255之中的数
}
add 12 34 
var=$?   #使用$?接收函数的返回值
echo $var
echo $a

在调用传参之后,使用var接受上一条结束的返回值

而在返回值超过258时,使用全局也能进行传递(Bash 中的退出状态码(包括 return 语句的值)是 8 位无符号整数,所以它们会自动进行模 256 运算)

或者使用命令置换的方法

function add() {echo 258
}result=$(add)
echo $result  # 这将输出 258

local声明局部变量

在局部使用将变量定义成局部变量

function add() 
{ #echo $(($1+$2)) #echo $0 a=258 local b=80   #被定义成了一个局部变量 echo $b unset b     #unset是可以清空局部变量 echo $b return $a   #返回值只能返回0-255之中的数 
} 

 

  1. 实现一个对数组求和的函数,数组通过实参传递给函数
#!/bin/bashfunction array_sum() {local sum=0for num in "$@"; dosum=$((sum + num))doneecho $sum
}result=$(array_sum "$@")
echo "The sum of the array is: $result"

2.写一个函数,输出当前用户的uid和gid,并使用变量接收结果 

#!/bin/bash
uid=0
gid=0function id_func(){
uid=$(id | cut -d' ' -f1 | cut -d'=' -f2 | cut -d'(' -f1)
gid=$(id | cut -d' ' -f2 | cut -d'=' -f2 | cut -d'(' -f1)}
id_func
echo "UID: $uid"
echo "GID: $gid"

相关文章:

C高级 DAY4

一、分支语句 case ...in语句 shell中的switch语句 case $变量名 in常量1)语句;; ------->类似于C中break的作用,;;除了最后一条分之外,都不能省略常量2)语句;; 常量n)语句;;*) ------->类似于C中default,但…...

C高级day4

作业 实现一个对数组求和的函数,数组通过实参传递给函数 写一个函数,输出当前用户的uid和gid,并使用变量接收结果 思维导图...

Java8-17 --- idea2022

目录 一、idea官网 二、使用idea编写hello world 三、查看工程中的JDK配置信息 四、详细设置 4.1、显示工具栏 4.2、默认启动项目配置 4.3、取消自动更新 4.4、选择整体主体与背景图 4.5、设置编辑器主题样式 4.5.1、编辑器主题 4.5.2、字体大小 4.5.3、修改注…...

Mybatis---增删改查

目录 一、添加用户 (1)持久层接口方法 (2)映射文件 (3)测试方法 二、修改用户 (1)持久层接口方法 (2)映射文件 (3)测试方法 …...

开机性能-如何抓取开机systrace

一、理论 1.背景 抓取开机 trace 需要使用 userdebug 版本,而我们测试开机性能问题时都要求使用 user 版本,否则会有性能损耗问题。因此想要在抓取开机性能trace 时,需要在 user 版本上打开 atrace 功能之后才能抓取 trace,默认 …...

VBA技术资料MF54:VBA_EXCEL实时获取鼠标位置

【分享成果,随喜正能量】若人散乱心,乃至以一花,供养于画像,渐见无数佛。所以发一幅释迦牟尼佛像,与同修善友一起每日在微博上供养,只要有供养之心,便可积累功德。以此回向,愿求者如…...

模电课程设计

主要内容跟本科实验关系很大,可以用来借鉴。 包含文件有:实验报告、Multisim仿真文件,资料很全,有问题可以私信 目录 1、模电课设:用Multisim简单了解二极管 2、模电课设:用Multisim简析三极管与场效应…...

【2023研电赛】兆易创新命题三等奖: 低成本单母线电流永磁同步无感驱动器

本文为2023年第十八届中国研究生电子设计竞赛兆易创新企业命题三等奖以及决赛最佳论文奖分享,参加极术社区的【有奖活动】分享2023研电赛作品扩大影响力,更有丰富电子礼品等你来领!,分享2023研电赛作品扩大影响力,更有…...

原生Js 提取视频中的音频

Js提取视频中的音频 将视频中的音频轨道分离出来&#xff0c;生成 wav 文件播放或下载&#xff08; Vue3 setup &#xff09; 代码实现 template <button><label for"file" id"filename">选择视频文件</label><input type"fi…...

设计模式-备忘录模式(Memento Pattern)

文章目录 前言一、备忘录模式的概念二、备忘录模式的实现三、备忘录优缺点优点&#xff1a;缺点&#xff1a;总结 前言 备忘录模式&#xff08;Memento Pattern&#xff09;是一种行为型设计模式&#xff0c;它用于捕获和存储对象的内部状态&#xff0c;以便在以后可以恢复到先…...

PHP对接阿里云虚拟号的实现(号码隐私保护)

fastadmin 封装框架 实现功能&#xff1a;AXN隐私号绑定、解绑&#xff1b; 场景&#xff1a;为店铺手机号开通虚拟号&#xff0c;用户联系店铺展示虚拟号码&#xff1b; 官方开放文档地址&#xff1a;https://help.aliyun.com/document_detail/59655.html?spma2c4g.111742…...

刷新单年发射纪录:SpaceX成功发射62次猎鹰9号火箭

SpaceX一直都致力于推进航天领域的发展。近日&#xff0c;该公司的猎鹰9号火箭再次刷新了单年发射纪录&#xff0c;目前已经成功发射了62次。除此之外&#xff0c;今年SpaceX还发射了一枚猎鹰火箭和一枚巨型火箭。马斯克表示&#xff0c;他的目标是实现每月10次猎鹰飞行&#x…...

项目打包docker镜像 | 上传nexus | jenkins一键构建

文章目录 前言准备实操1、打开docker的远程访问2、编写dockerfile文件3、指定nexus环境4、配置jenkins5、使用jenkins构建 总结 前言 Docker部署项目是指使用Docker容器化技术将应用程序及其依赖项打包成一个独立的、可移植的运行环境&#xff0c;并在各种操作系统和平台上进行…...

ios 运行ipa包 日志查看方式

方法一&#xff1a; 使用ideviceinstaller工具 # 安装ipa命令 brew install ideviceinstaller ideviceinstaller -i xxx.ipa# 查看运行日志 idevicesyslog# idevicesyslog 查找命令 idevicesyslog | grep test -A 3 -B 2 # 输出关键字所在行后3行&#xff0c;前2行) idevic…...

AUTOSARCAN-Tp协议

目录 一.单帧、首帧、连续帧、流控帧 单帧传输 SF单帧&#xff1a; 多帧传输 FF&#xff08;首帧&#xff09;&#xff1a; CF&#xff08;连续帧&#xff09;&#xff1a; FC&#xff08;流控帧&#xff09;&#xff1a; 一.单帧、首帧、连续帧、流控帧 CAN诊断由发送端…...

【设计模式】组合模式实现部门树实践

1.前言 几乎在每一个系统的开发过程中&#xff0c;都会遇到一些树状结构的开发需求&#xff0c;例如&#xff1a;组织机构树&#xff0c;部门树&#xff0c;菜单树等。只要是需要开发这种树状结构的需求&#xff0c;我们都可以使用组合模式来完成。 本篇将结合组合模式与Mysq…...

恒林家居引入纷享销客CRM系统,领跑家居行业营销数字化进程

近日&#xff0c;恒林家居股份有限公司&#xff08;&#xff08;股票代码&#xff1a;603661以下简称为“恒林家居”&#xff09;携手纷享销客在湖州召开了CRM项目启动会。双方领导及核心项目人员齐聚一堂&#xff0c;展开了深度交流并达成了重要共识。 作为家居行业的领军企业…...

多线程-锁的种类

1 作用 Java中的锁主要用于保障多并发线程情况下数据的一致性。在多线程编程中为了保障数据的一致性&#xff0c;我们通常需要在使用对象或者方法之前加锁&#xff0c;这时如果有其他线程也需要使用该对象或者该方法,则首先要获得锁,如果某个线程发现锁正在被其他线程使用,就会…...

Hive 和 HDFS、MySQL 之间的关系

文章目录 HiveHDFSMySQL三者的关系 Hive、MySQL 和 HDFS 是三个不同的数据存储和处理系统&#xff0c;它们在大数据生态系统中扮演不同的角色&#xff0c;但可以协同工作以支持数据管理和分析任务。 Hive Hive 是一个基于 Hadoop 生态系统的数据仓库工具&#xff0c;用于管理和…...

【面试题】如何实现数组去重的?有几种方式?

前端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;前端面试题库 【国庆头像】- 国庆爱国 程序员头像&#xff01;总有一款适合你&#xff01; 1. 方法一&#xff1a;利用两层循环数组的splice方法 通过两层循环对数组…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型&#xff1a;架构设计与关键步骤 在当今数字化转型的浪潮中&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中&#xff0c;不仅可以优化用户体验&#xff0c;还能为业务决策提供…...

应用升级/灾备测试时使用guarantee 闪回点迅速回退

1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间&#xff0c; 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点&#xff0c;不需要开启数据库闪回。…...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 &#xff08;一&#xff09;多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如&#xff0c;当用户上传一张“蓝色连衣裙”的图片时&#xff0c;接口可自动提取图像中的颜色&#xff08;RGB值&…...

Swagger和OpenApi的前世今生

Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章&#xff0c;二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑&#xff1a; &#x1f504; 一、起源与初创期&#xff1a;Swagger的诞生&#xff08;2010-2014&#xff09; 核心…...

Vite中定义@软链接

在webpack中可以直接通过符号表示src路径&#xff0c;但是vite中默认不可以。 如何实现&#xff1a; vite中提供了resolve.alias&#xff1a;通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...

redis和redission的区别

Redis 和 Redisson 是两个密切相关但又本质不同的技术&#xff0c;它们扮演着完全不同的角色&#xff1a; Redis: 内存数据库/数据结构存储 本质&#xff1a; 它是一个开源的、高性能的、基于内存的 键值存储数据库。它也可以将数据持久化到磁盘。 核心功能&#xff1a; 提供丰…...

深度剖析 DeepSeek 开源模型部署与应用:策略、权衡与未来走向

在人工智能技术呈指数级发展的当下&#xff0c;大模型已然成为推动各行业变革的核心驱动力。DeepSeek 开源模型以其卓越的性能和灵活的开源特性&#xff0c;吸引了众多企业与开发者的目光。如何高效且合理地部署与运用 DeepSeek 模型&#xff0c;成为释放其巨大潜力的关键所在&…...