Linux嵌入式学习之Ubuntu入门(六)shell脚本详解
系列文章内容
Linux嵌入式学习之Ubuntu入门(一)基本命令、软件安装、文件结构、编辑器介绍
Linux嵌入式学习之Ubuntu入门(二)磁盘文件介绍及分区、格式化等
Linux嵌入式学习之Ubuntu入门(三)用户、用户组及文件权限
Linux嵌入式学习之Ubuntu入门(四)Makefile
Linux嵌入式学习之Ubuntu入门(五)汇编语法学习
Linux嵌入式学习之Ubuntu入门(六)shell脚本详解
文章目录
- 系列文章内容
- 前言
- shell脚本详解
- shell脚本语法
- 外部输入
- 整型计算
- test命令
- [ ]判断符
- 默认变量
- 条件判断
- 函数
- 循环
前言
最近痛定思痛,觉得自己应该硬杠Linux,确实有些难度,但是我觉得学习之后一定会大有用处,而且我不希望局限在当下的情况,学习完嵌入式Linux之后,我想学习制作一些更加有难度,更加锻炼人的东西。
内容有些多,我觉得最好是过一遍,好好记录一下,一些开发最好把暂时用不到的模块跳过,时间不够。
shell脚本详解
shell脚本类似windows的批处理文件,将连续可执行命令写成一个文件,提供数组、循环、条件判断的等功能,shell脚本一般是Linux运维或者系统管理员要掌握的,作为嵌入式开发人员,只需要掌握shell脚本最基础的部分即可。
shell脚本是纯文本文件,命令从上而下,一行一行执行,扩展名为.sh
第一行一定为:(表示使用bash,表示实现shell的环境路径)
#!/bin/bash
例如将echo命令写在文件中,在命令窗输出字符串
如上图所示,通过 ls -l 查看tesh.sh文件的权限,之后通过chmod(change mode)修改文件的权限,之后即可运行,但是修改回去后发现,只有读写是不能执行的。
关于文件权限相关见:Linux嵌入式学习之Ubuntu入门(三)用户、用户组及文件权限
详细学习linux的shell脚本推荐《鸟哥的Linux私房菜》
shell脚本语法
外部输入
程序功能:外部输入进行变量赋值
这就涉及到shell的命令编写语法了,需要学习积累
read命令读取输入值,类比C语言的各种函数吧
read命令参数 | 含义 |
---|---|
read -a arrayname | 把单词清单读入arrayname的数组里 |
read -p “text” | 打印提示(text),等待输入,并将输入存储在REPLY中。 |
read -r line | 允许输入包含反斜杠。 |
read -t 3 | 指定读取等待时间为3秒。 |
read -n 2 var | 从输入中读取两个字符并存入变量var,不需要按回车读取。 |
read -d " :" var | 用定界符“ :”结束输入行。 |
整型计算
程序功能:输入两个整型完成加法运算:
shell还支持整型运算,数值计算用 $(表达式),如上图
test命令
程序功能:查看文件是否存在:
程序功能:测试输入字符串是否相等:
test命令参数 | 含义 |
---|---|
-e | 当路径存在时返回真 |
-f | 当路径存在且为文件时返回真 |
-d | 当路径存在且为文件夹时返回真 |
-z | 当str为空时返回真 |
-n | 当str为非空时返回真 |
= | 两个字符串相等时返回真 |
== | 两个字符串相等时返回真,同= |
!= | 两个字符串不相等时返回真 |
还有大于小于,各种逻辑运算符的参数,之后用到了再积累
[ ]判断符
程序功能:判断字符串相等。
【】前后要有空格,同时记得变量加上双引号,可以用==或者!=
如果不加双引号,那么这个变量就不可赋值带空格的字符串,因为系统会识别为多个变量。发送错误提示:
first赋值为a,系统输出1,first赋值”1 2“,系统会识别为两个变量,这样就不是判断字符串相等
默认变量
程序功能:测试各个默认变量的作用
0 0~ 0 n,表示shell脚本的参数,shlle脚本命令本身为$0
$#:#表示最后一个参数的标号。(参数的个数)
$@:表$1、$2、$3…即所有的参数的集合
条件判断
程序功能:判断输入为Y或者N,并输出语句
格式:
/第一种
if 条件判断 ; then//判断成立要做的事情
fi/第二种
if条件判断 ; then//条件判断成立要做的事情
else//条件判断不成立要做的事情。
fi/第三种
if 条件判断 ; then//条件判断成立要做的事情
elif [条件判断]; then //可以叠加多个elif
//条件判断成立要做的事情
else//条件判断不成立要做的事情。
fi
程序功能:*这里代表的是通配符,表示所有符号,如果输入参数为a或者b,会输出语句,其他输入都进入通配符的程序块
//类似C的switch case语句
case $变量 in
“第1个变量内容”)程序段;; //表示该程序块结束!!
“第2个变量内容”)程序段;;
“第n个变量内容”)程序段;;
esac
函数
function fname () {//函数代码段
}
还支持传参:a b在这里是传递的参数,也就是C语言里面的实参
循环
while循环:
while [条件] //括号内的状态是判断式
do //循环开始//循环代码段
done//还有另外一种until do done,表示条件不成立的时候循环,条件成立以后就不循环了,写法如下:
until [条件]
do
//循环代码段
done
for循环:
for var in con1 con2 con3……
do
//循环代码段
donefor循环数值处理,写法
for((初始值; 限制值; 执行步长))
do
//循环代码段
done
相关文章:

Linux嵌入式学习之Ubuntu入门(六)shell脚本详解
系列文章内容 Linux嵌入式学习之Ubuntu入门(一)基本命令、软件安装、文件结构、编辑器介绍 Linux嵌入式学习之Ubuntu入门(二)磁盘文件介绍及分区、格式化等 Linux嵌入式学习之Ubuntu入门(三)用户、用户组…...
学习完C++ 并发编程后 手写线程池 最简单的线程池
目录 精简版注释: //线程安全的队列容器(精简版) 最简易可行的线程池(精简版) 详细版注释: //线程安全的队列容器(详细版) 最简易可行的线程池(详细版࿰…...

【Overload游戏引擎分析】编辑器对象鼠标拾取原理
Overload的场景视图区有拾取鼠标功能,单击拾取物体后会显示在Inspector面板中。本文来分析鼠标拾取这个功能背后的原理。 一、OpenGL的FrameBuffer 实现鼠标拾取常用的方式有两种:渲染id到纹理、光线投射求交。Overload使用的是渲染id到纹理,…...

【Spring内容进阶 | 第三篇】AOP进阶内容
前言: 在前面我们已经粗略的介绍了什么是AOP以及各种基础知识点,而本篇我们将聚焦于AOP的细节,详细的讲解一下AOP中的通知类型,通知顺序,切入点表达式以及连接点。通过对AOP的熟练掌握,我们可以快速编写出低…...

华为云ModelArts:引领AI艺术创作的未来,让人人都可以成为“艺术家”!
随着科技的飞速发展,艺术创作逐渐告别传统的画布和画笔,开始走向数字化、智能化的新时代。在这个蓬勃发展的领域中,华为云ModelArts以其强大的功能和出色的性能引领着AI艺术创作的未来。 华为云ModelArts是面向开发者的一站式AI开发平台,为机器学习与深度学习提供海量数据预处…...
Elasticsearch:如何从 Elasticsearch 集群中删除数据节点
Elasticsearch 集群通常包含多个节点,并且可能存在需要从集群中删除节点的情况。 应谨慎执行此过程,以确保数据的完整性和可用性。 在本文中,我们将引导你完成从 Elasticsearch 集群安全删除节点的步骤。 确保集群是绿色的 在尝试从 Elastic…...
长假回归,回顾一下所有的电商API接口
淘宝API接口 item_get 获得淘宝商品详情item_get_pro 获得淘宝商品详情高级版item_review 获得淘宝商品评论 获取测试keyitem_fee 获得淘宝商品快递费用item_password 获得淘口令真实urlitem_list_updown 批量获得淘宝商品上下架时间seller_info 获得淘宝店铺详情item_search…...

认识计算机主板
目录 定义主要部件简单图示 主要功能 定义 计算机主板(Motherboard)是计算机系统中的核心组件之一,也被称为系统板、主板或母板。它是一个电子电路板,用于连接和支持计算机的各种硬件组件,包括中央处理器(…...
PHP乱七八糟面试题
1、请解释PHP中的JWT是什么? JWT(JSON Web Token)是一种用于认证和授权的标准,可以在不同的系统之间安全地传递信息。 在PHP中,可以使用各种JWT库来生成和解析JWT,JWT包含了一些元数据和签名, …...
pom管理规范
0. 引言 在单机架构下,我们只需要将我们的依赖在pom中引入。但是过渡到微服务架构后,会涉及到多模块引用相同的依赖,多模版之间依赖的版本太过分散难以管理的问题。 这就需要我们利用maven中依赖传递的特性,结合dependencyManage…...
AI大模型的安全隐患问题与新兴Anthropic新势力涌动
引言: 无论从社会层面或技术层面,大模型的安全隐患都是一个不容小觑的话题。也正因此,ChatGPT 初兴起时,国内的 To C 大模型产品一时受阻。而尽管 9 月初第一批 8 家大模型通过备案,各家厂商对大模型的安全问题也不敢…...

slamplay:用C++实现的SLAM工具集
0. 项目简介 slamplay 是一个功能强大的工具集合,可用于开始使用 C 来玩和试验 SLAM。这是一项正在进行的工作。它在单个 cmake 框架中安装并提供一些最重要的功能 后端框架(g2o、gtsam、ceres、se-sync 等)、 前端工具(opencv、…...

IPT2602协议-USB 快速充电端口控制器
产品描述: IPT2602是一款USB端口快速充电协议控制芯片。IPT2602智能识别多种快速充电协议,对手机等受电设备进行快速充电。IPT2602根据受电设备发送的电压请求能够精确的调整VBUS输出电压,从而实现快速充电。 IPT2602在调整5V输出电压前会自动…...

Zotero 超好用插件的下载链接及配置方法(PDF-translate/ZotFile/茉莉花/Zotero Scihub)
目录 前言插件安装方法插件一:文献翻译插件(pdf-translate)插件二:文献附件管理(ZotFile)插件三:中文文献插件(茉莉花)插件四:Sci-Hub 自动下载文献ÿ…...

Titus网关中的缓存一致性机制
API网关引入缓存可以在不影响数据一致性的前提下,有效优化接口时延。本文介绍了Netflix在Titus网关上引入缓存的实践,比较了有无缓存对访问时延的影响。原文: Consistent caching mechanism in Titus Gateway 前言 Titus是Netflix的云容器运行时…...
flutter开发实战 - inappwebview设置cookie
flutter开发实战-inappwebview设置cookie 在使用inappwebview时候,需要设置cookie,这里记录一下 一、在initialUserScripts中设置cookie 在inappwebview中有一个initialUserScripts,可以初始化设置cookie等,我们可以通过该属性…...

零基础如何自学网络安全,基于就业前景全方位讲解,包教包会
你是否对网络空间安全充满好奇?想要解开网络世界神秘的面纱?你是否对黑客技术着迷?而找不到合适的学习途径?你是否遭到过各种各样的网络攻击,却因知识的匮乏束手无策? 那么接下来将为你全面介绍,…...

Java项目防止SQL注入的几种方案
目录 一、什么是SQL注入? 二、Java项目防止SQL注入方式 1、PreparedStatement防止SQL注入 2、mybatis中#{}防止SQL注入 3、对请求参数的敏感词汇进行过滤 4、nginx反向代理防止SQL注入 一、什么是SQL注入? SQL注入即是指web应用程序对用户输入数…...

Win11 安装安卓子系统方法教程
WIN11安装安卓子系统 准备工作下载安装安装完成使用adb连接子系统结束 准备工作 开启电脑中的 控制面板>>>>程序和功能>>启用或关闭Windows功能>>>找到“Hyper-V”,把勾都勾上,确定,完成安装,并重启电…...
golang pg 数据库不存在 就创建 --chatPGT
问:linkOrCreateDatabase(addr ), 函数执行 连接 pg数据库,若数据库 不存在就创建 gpt: 要在 Go 中连接到 PostgreSQL 数据库并在数据库不存在时创建数据库,你可以使用 github.com/lib/pq 包以及 database/sql 包。以下是一个示例࿱…...

JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...

Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...

Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...