当前位置: 首页 > 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方法 通过两层循环对数组…...

阿里健康年营收342亿:净利19亿 CFO屠燕武辞职

雷递网 雷建平 5月14日阿里健康&#xff08;股份代号&#xff1a;00241&#xff09;今日发布截至2026年3月31日的财报。财报显示&#xff0c;截至2026年3月31日的年度&#xff0c;阿里健康营收为342.55亿元&#xff0c;较上年同期的306亿元增长12%。截至2026年3月31日的年度&am…...

烟花爆竹安全禁令(零售篇)

1.严禁无证/过期经营、超范围经营&#xff1b; 2.严禁下店上宅、前店后宅、与居住场所合一&#xff1b; 3.严禁超量储存、店外堆放、超高堆放&#xff1b; 4.严禁明火、吸烟、高温灯具、非防爆电气&#xff1b; 5.严禁消防设施&#xff08;灭火器&#xff09;缺失/失效、通道堵…...

3分钟解锁WeMod高级功能:Wand-Enhancer完全指南,免费获得Pro体验

3分钟解锁WeMod高级功能&#xff1a;Wand-Enhancer完全指南&#xff0c;免费获得Pro体验 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/gh_mirrors/we/Wand-Enhancer 你是否曾经想过…...

三步实现本地化视频硬字幕提取:免费AI工具轻松生成SRT字幕文件

三步实现本地化视频硬字幕提取&#xff1a;免费AI工具轻松生成SRT字幕文件 【免费下载链接】video-subtitle-extractor 视频硬字幕提取&#xff0c;生成srt文件。无需申请第三方API&#xff0c;本地实现文本识别。基于深度学习的视频字幕提取框架&#xff0c;包含字幕区域检测、…...

基于LLM的通用信息提取:Extractous库实战指南与应用场景

1. 项目概述&#xff1a;从混乱到有序&#xff0c;Extractous如何重塑信息提取在信息爆炸的时代&#xff0c;我们每天都被海量的非结构化文本包围——新闻文章、产品评论、会议纪要、研究报告、社交媒体动态。作为一名长期和数据打交道的从业者&#xff0c;我深知从这些“文本海…...

PySpark 安装全过程总结

而是典型的&#xff1a;Windows 多开发环境下的大数据环境冲突问题。整个过程里&#xff0c;你实际上同时涉及了&#xff1a;Java Python Conda PySpark PyCharm Windows PATH Socket通信而&#xff1a;PySpark 本质上又是&#xff1a;Python JVM(Java) 的混合体系。所以&…...

高压直流配电技术:数据中心能效革命的关键

1. 高压直流配电技术的革命性突破在数据中心和电信基站的配电房里&#xff0c;一排排嗡嗡作响的变压器和转换设备正消耗着惊人的能量。传统交流配电系统就像一条蜿蜒曲折的山路&#xff0c;电力需要经过多次"换乘"才能到达终端设备。而高压直流&#xff08;HVDC&…...

能源电力行业数据安全痛点及解决方案

能源电力行业是国家关键基础设施的重要组成部分&#xff0c;其数据安全不仅关乎企业核心竞争力&#xff0c;更关系到国家能源安全。随着数字化转型的深入&#xff0c;能源电力企业在研发、生产、运营过程中产生了海量敏感数据&#xff0c;从核心算法源代码到电网调度参数&#…...

首尔国立大学:AI读完“书“就扔掉笔记,竟比一直抄笔记更聪明?

这项由首尔国立大学数据科学研究生院主导的研究&#xff0c;以预印本形式发布于2026年5月&#xff0c;论文编号为arXiv:2605.06105&#xff0c;有兴趣深入了解的读者可以通过该编号查询完整论文。每次你问AI一个问题&#xff0c;它都要先把你给它的所有材料从头到尾读一遍&…...

VMware Workstation Pro 17免费激活全攻略:5000+密钥轻松上手虚拟化

VMware Workstation Pro 17免费激活全攻略&#xff1a;5000密钥轻松上手虚拟化 【免费下载链接】VMware-Workstation-Pro-17-Licence-Keys Free VMware Workstation Pro 17 full license keys. Weve meticulously organized thousands of keys, catering to all major versions…...