嵌入式全栈开发学习笔记---shell脚本

news2024/9/22 3:38:15

目录

shell脚本有什么用?

第一个shell脚本

shell基本语法

shell变量

shell三种变量

环境级变量

用户级变量

系统级变量

在shell脚本中进行数学运算

shell数组

基本数组

关联数组

流程控制

If语句

Case语句

循环语句

While语句

For语句


上节我们学习了常用库libevent,本节开始学习shell脚本!

shell脚本有什么用?

Shell其实也是一门语言,在嵌入式开发里面经常会用到。

在Linux中有很多操作命令,如果为了节约时间,可以写一个shell脚本,里面包含了很多命令,执行shell脚本就相当于执行这些命令。

所以shell脚本里面其实就是这些命令的集合和shell的一些语法。基本上自动化的领域离不开shell脚本。

 如果你想要作系统启动之后自动启动一些服务(类似windows开机之后会有一些自启动软件),我们就可以用shell来完成。

第一个shell脚本

接下来开始演示第一个shell脚本

注:脚本文件一般以.sh结尾(这个不是后缀,在Linux系统里面没有后缀这个说法)

在shell中,#表示注释,但是第一行的#号后面紧跟着一个!感叹号,说明第一行#不是注释的意思,第一行这里的意思是:使用/bin/bash来解析脚本

/bin/bash是一个文件

有些地方也用/bin/sh来解析

两者在语法差不多。

我们就简单用这个程序输出一个Helloworld就行了

echo就相当于C语言中的printf。

编译的时候的命令是:chmod  +x  文件名

执行命令可以任意选择以下一种:

./文件名

bash 文件名

sh 文件名

调试的时候可以用这条命令:

bash  -x  文件名

这条命令相当于是一句一句的执行并打印出来

结果:

echo这条命令可以直接在终端的屏幕中打印,数据可加双引号也可不加

它也可以将数据输出到一个指定的文件里面

> 是一个重定向符,如果没有那个指定的文件就创建一个再将数据写入里面

查看文件里面的数据可以用:cat 文件名

如果我们再用echo输出到这xx文件,它就会将原来的数据覆盖掉

如果不想覆盖到原来的数据可以用>>这个符号

shell基本语法

shell变量

在shell中没有定义变量这个说法,直接声明,没有数据类型

注意:在shell中空格是不能乱加的,这和C语言不一样,比如在等于号和数据之间不能有空格

在shell脚本中也有命令行参数

Shell里面有三种变量:

shell三种变量

环境级变量

当我们输入export后就跳出这么多变量

其中HOME="/root",HOME就是一个环境变量,它的值是/root

环境变量可用于不同脚本之间的通信

我们可以自己定义一个环境变量

在脚本里面可以直接使用环境变量

如果我们把这个环境变量删掉再打印就没了

打印出来是空的了

环境级变量只有在当前的终端下才可以用,比如我们重开一个终端窗口直接运行这个.sh文件打印是打印不出来的

并且也找不到AA这个变量

所以环境级变量只能在当前这个终端窗口可用,如果换一个终端或者换一个用户去登录的话就不可用了。

我们也可以直接把这个变量写入这个.sh文件里面去

这样打印就能打印出来

换个终端窗口执行它也能打印,这是因为这个程序里有export这句代码,换一个终端窗口执行只要执行了export,这个环境变量就生效,就能打印。

当时一旦我们注释掉export这行代码它就打印不出来了,这就是环境级变量

用户级变量

想要让export AA=100变成用户级变量则需要修改配置文件

在家目录下有个.profile的文件,我们只要把环境变量加进这个文件就可以了,怎么加?

但是./profile这个文件有的环境下没有,而>>这个符号是重定向符,如果没有.profile这个文件就会生成这个文件,然后输入进去

现在export AA=100这个环境变量已经输入到家目录下的.profile文件中了

接下来我们不需要执行export这句代码了,把执行export这行代码注释掉,,单独执行.profile文件,

运行后它还是能打印

并且这样换个终端窗口也能打印

这就是环境变量和用户变量的区别

但是每个用户都对应一个profile文件,切换不同用户会有不同的profile文件,不同profile文件对应不同的环境变量,因此切换到不同用户后就不能用这个.profile里面的export AA=100环境级变量了

系统级变量

不限终端也不限用户,只要是登录操作系统都可以用

系统级变量也要修改一个配置文件,这里我们要将环境变量添加到根目录下的etc中的profile文件

现在我们把这句注释掉,

然后切换个用户测试一下

注:创建新用户turbo后,如果想要删除用户就用userdel turbo命令,如果要切换到turbo,就输入su turbo

切换用户后还是能运行

然后我们用新用户登录系统测试一下

可以看到它也能打印出来,因此我们将环境变量输入到/etc/profile中它就是系统级的环境变量

接下来学习在shell脚本里面如何进行数学运算

在shell脚本中进行数学运算

以下三种写法都可以,

中括号[]等于两个小括号

“num=` expr 表达式 ` ”这个表示取后面的表达式的结果给num

shell数组

Shell数组有基本数组和关联数组

注:shell是不分字符和字符串的

基本数组

 echo ${array1[0]} 表示访问数组1的第0个元素

关联数组

注意如果运行的时候报这个错误:

那就需要升级bash,升级操作推荐博文:

linux更新bash版本,shell升级,Linux系统升级bash----------CSDN博客

流程控制

If语句

Test这个命令也可以在脚本里面使用,输入命令:man 1 test就可以查看test这个命令的介绍

还可以用这选择做一个入参判断,如果我们忘记输入参数了就给个提示

这个test里面很多命令都是可以在脚本里面使用,今后想用哪个可以自己查阅,这里就不一一测试了。

Case语句

这两个不正常可能是编码的问题

我们可以修改这个环境变量

修改成C,等待测试完之后再换回这个zh_CN.UTF-8(注意:不换回zh_CN.UTF-8的话之后就写不了中文了)

循环语句

While语句

这样它就把当前文件夹下的6.case.sh文件中的内容全部输出了

For语句

这样循环5次后确实创建了5个文件夹

进入每个文件夹后,都有一个同名的文件夹,里面都写this is这句话

这样循环5次后确实创建了5个文件夹,进入每个文件夹后都会有一个同名的文件

文件里写着一句话

还可以另外写一个for循环进去这个文件里面把这个内容改掉

以上就是shell脚本一些基础操作,如果我们以后可以使用shell脚本来代替执行很多重复繁琐的命令,效率可以大大提高。

还有一些关于shell脚本的高级操作,之后有空的话再更新,敬请期待。

下节开始复习C++!

如有问题可评论区或者私信留言,如果想要进交流群请私信!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

这可能是你在编程学习中最容易忽视的一课

引言 在编程学习的道路上,你是否曾感到困惑,面对着一堆复杂的术语和工具,不知道从何下手?刚开始编程时,是不是总觉得像走进了一片迷雾?别担心,你并不孤单。这篇文章将为你揭示“计算机教育中缺…

深度学习资料集合

社区推荐 AIQ 是一个专注于人工智能和机器学习的交流平台,旨在推动行业内的知识分享与技术交流。 专知 是一个聚焦于前沿科技和多领域知识的平台,提供丰富的文章和讨论,使用户能够深入理解机器学习及其应用。 DataTau DataTau 是一个数据…

Facebook与区块链:构建更安全的社交网络生态

随着数字化时代的不断推进,社交网络的安全性和隐私保护成为了用户最为关注的问题之一。Facebook,作为全球领先的社交媒体平台,正在探索如何利用区块链技术来增强其平台的安全性和透明度。这一探索不仅是对现有技术的补充,更是对未…

Android运行时权限详解

文章目录 Android运行时权限详解Android权限机制详解在程序运行时申请权限 Android运行时权限详解 Android的权限机制并不是什么新鲜事物,从系统的第一个版本开始就已经存在了。但其实之前Android的权限机制在保护用户安全和隐私等方面起到的作用比较有限&#xff…

利用OSINT追踪勒索组织活动

0X00前言 众所周知,勒索组织一直是臭名昭著的代名词。在当今网络世界上时时刻刻都存在着勒索软件的身影。正所谓,不知攻,焉知防。我们可以更据OSINT的方法,去追踪分析各大勒索组织的活动,以及状态。为应对可能的勒索攻…

【Python基础】元组类型

本文收录于 《Python编程入门》专栏,从零基础开始,分享一些Python编程基础知识,欢迎关注,谢谢! 文章目录 一、前言二、Python 元组2.1 创建特殊元组2.2 访问元组2.3 删除元组2.4 元组截取2.5 元组运算符2.6 元组内置函…

佰朔资本:9月券商金股出炉,这类股获机构力推

现在,券商新一批月度金股近期连续出炉。到9月1日,14家券商发布9月月度金股,举荐的104只金股会集分布在电子、机械设备、传媒、汽车等工作中。从个股来看,比亚迪、我国安全、阳光电源获2家以上券商共同举荐。别的,北方华…

30 静态路由

静态路由 一、配置静态路由 (一)静态路由特点 ​ 主要特点: ​ 由管理员手工配置,为单向条目通信双方的边缘路由器都需要指定,否则会导致数据包有去无回 (二)静态路由配置 ​ 使用ip rout…

开学季儿童护眼台灯怎么选择?盘点央视公布十大护眼灯!

随着年级的升高和学习内容的增加,学生的休闲娱乐时间逐渐减少,相反,他们在书桌前度过的时间却越来越多。近年来,由于电子产品的广泛使用,我国青少年的用眼负担显著增加。据权威机构预测,到2050年&#xff0…

ActiViz实战:使用vtkDistanceWidget实现两点测距功能

文章目录 一、效果图预览二、实现步骤三、C#完整实例代码一、效果图预览 二、实现步骤 1、通过vtkCellPicker拾取点坐标 2、通过vtkDistanceRepresentation2D设置起始点和结束点位置 3、通过vtkDistanceRepresentation2D的GetAxis()获取vtkAxisActor2D对象,并设置连线的样式 …

前端安全:如何防范跨站脚本攻击(XSS)

聚沙成塔每天进步一点点 本文回顾 ⭐ 专栏简介前端安全:如何防范跨站脚本攻击 (XSS)1. 引言2. 什么是跨站脚本攻击 (XSS)?2.1 XSS的分类 3. XSS攻击的危害4. XSS的常见攻击手法4.1 注入恶意脚本4.2 伪造表单和链接4.3 操纵DOM结构 5. 如何防范XSS攻击5.1…

Git使用(命令+idea快捷)

目录 一、概述 1.什么是Git 2.Git能干什么 3.简介 4.下载和安装 二、Git代码托管服务 1.常用的Git代码托管服务 2.使用码云代码托管服务 三、Git全局设置(常用命令) 1.命令 2.实现 四、获取Git仓库(常用命令) 1.两种方…

基于 cuda sdk 12.4.1安装cudnn8.9.7 步骤备忘——与cudnn9有差别

cuda环境崩了,运行 nvidia-smi后无法 连接 drvier,重装了 cuda 12.4.1 cudnn 8.9.7 因为看到pytorch daily 代码目前是支持 12.4的。发现 cudnn8 与 nv官网提供的cudnn9的安装时在文字上稍微有些差别, 主要是 cudnn8: sudo apt-get -y i…

水凝胶支架进行4D生化光定制?有啥用?快来看看!

大家好,今天我们来了解一项关于水凝胶支架的技术——4D生化光定制——《4D Biochemical Photocustomization of Hydrogel Scaffolds for Biomimetic Tissue Engineering》发表于《Accounts of Materials Research》。随着科技的发展,人们对组织工程和生物…

【C++】C++STL 揭秘:Strng背后的底层逻辑

C语法相关知识点可以通过点击以下链接进行学习一起加油!命名空间缺省参数与函数重载C相关特性类和对象-上篇类和对象-中篇类和对象-下篇日期类C/C内存管理模板初阶String使用 在上篇介绍string类的使用与理解,本篇将为大家来带关于string的底层实现逻辑&…

「SpEL Validator」使用指南(一套无敌的参数校验组件)

前言 这是一套全新的参数校验组件,并非造轮子。 看完本文你可能会觉得用不上或不屑于使用,但这玩意确实有应用场景,你不妨稍微留意一下,日后你总会发现有用得上的时候。 此乃系列文章,当前为第②篇,其他…

Puppeteer的高级用法:如何在Node.js中实现复杂的Web Scraping

概述 随着互联网的发展,网页数据抓取(Web Scraping)已成为数据分析和市场调研的重要手段之一。Puppeteer作为一款强大的无头浏览器自动化工具,能够在Node.js环境中模拟用户行为,从而高效地抓取网页数据。然而&#xf…

Java基于微信小程序的实习管理系统

简介 本次开发的实习生管理系统实现了字典管理、公告管理、公司管理、简历管理、老师管理、实习管理、实习日志管理、通知管理、学生管理、职位招聘管理、职位收藏管理、职位留言管理、简历投递管理、管理员管理等功能。系统用到了关系型数据库中王者MySql作为系统的数据库&am…

点云配准之ICP和NDT算法的高斯牛顿法求解

ICP算法 NDT算法 代码:https://github.com/taifyang/pointcloud-registration 参考:高翔《自动驾驶与机器人中的SLAM技术》

打造灵动空间,流动会场的声学优势—轻空间

在现代社会中,各类会议、展览、演出、培训等活动越来越多,对场地的需求也越来越多样化。传统的固定场地往往难以满足不同活动的需求,而“流动会场”凭借其灵活多变的特点,迅速成为各类活动的新宠。特别是其独特的声学优势&#xf…