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 包。以下是一个示例࿱…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...
C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...
C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...
MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...
PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...
Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...
