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

shell脚本的编写以及shell中语句(嵌入式学习)

shell学习

  • shell脚本
  • 编写步骤
  • shell变量
  • 功能性语句
    • 1.read
    • 2.expr
    • 3.let
    • 4.test
    • 逻辑运算符的书写格式
  • 结构性语句
    • 1.if…then…fi
    • 2、case...esac
    • 3、for..do..done
    • 4、while..do..done

shell脚本

将shell命令按照一定的逻辑顺序实现指定功能,放到一个文件中。文件叫脚本文件,后缀.sh,可以直接执行,不用编译。shell脚本语言是解释型语言

编写步骤

1、编辑脚本内容
vi xxx.sh
2、将脚本文件权限修改为可执行
chmod 777 xxx.sh
3、执行脚本文件
./xxx.sh 或 bash xxx.sh

shell变量

1.shell中允许建立变量存储数据,但是不支持数据类型,所有赋值给变量的值都解释为一串字符。

2.变量的定义格式:
变量名=值(等号两边都不能有空格)
取shell变量的值:$变量名

3.shell变量的分类
(1)环境变量 printenv 或 env
HOME=/home/hq
(2)用户自定义变量
在shell编程中通常定义的变量名用大写,变量的调用:
$变量名
Linux Shell/bash从右向左赋值
使用unset命令删除变量的赋值
(3)位置变量或命令行参数
$0 执行的脚本名
$1-$9 ${10}-${n} 命令行空格传的参数
$# 命令行参数个数,除$0
$@ $* 遍历输出命令行参数内容
4)预定义变量
$? 获取的是上一句命令是否正确执行的结果
0:真
非0:为假
$$ 获取进程pid

功能性语句

1.read

从终端获取值赋值给变量。

格式:read 变量名1 变量名2 …
加提示语句:read -p “提示字符串” 变量名1 变量名2 …

注:把终端读入空格隔开的第一个单词赋值给第一个变量,第二个
单词赋值给第二个变量,依次类推赋值,剩余所有单词赋值
给最后一个变量。
在这里插入图片描述

2.expr

算术运算命令expr主要用于进行简单的整数运算,
包括加(+)、减(-)、乘(\*)、整除(/)和求模(%)等操作
注意:
1)运算符左右两侧必须有空格
2)*和()必须加转义字符,\* 、 \( \)
3)expr语句可以直接输出运算结果
在这里插入图片描述

3.let

在运算中不能有空格
运算结果需要赋给一个变量
变量参与运算的过程不用加$取值
在这里插入图片描述

4.test

test语句可测试三种对象:字符串 整数 文件属性
1)字符串的测试:(等号两边加空格)

s1 = s2 	测试两个字符串的内容是否完全一样
真,假
echo $?
s1 != s2	测试两个字符串的内容是否有差异
-z s1 		测试s1 字符串的长度是否为0
-n s1 		测试s1 字符串的长度是否不为0

在这里插入图片描述

2)整数的测试:

a -eq b 		测试a 与b 是否相等
a -ne b			测试a 与b 是否不相等
a -gt b 		测试a 是否大于b
a -ge b 		测试a 是否大于等于b
a -lt b 		测试a 是否小于b
a -le b 		测试a 是否小于等于b	

3)文件属性的测试;

-d name     	测试name 是否为一个目录
-f name 		测试name 是否为普通文件
-e name     	测试文件是否存在

在这里插入图片描述

逻辑运算符的书写格式

|| :逻辑或  [ 表达式1 ] || [ 表达式2 ] [ 表达式1 -o 表达式2 ]
&& :逻辑与 [ 表达式1 ] && [ 表达式2 ] [ 表达式1 -a 表达式2 ]
!  :逻辑非 [ ! 表达式 ]

结构性语句

1.if…then…fi

基本结构:

if    表达式
then  命令表
fi 

在这里插入图片描述

如果表达式为真, 则执行命令表中的命令; 否则退出if语句, 即执行fi后面的语句。if和fi是条件语句的语句括号, 必须成对使用;命令表中的命令可以是一条, 也可以是若干条。
分层结构1:

if      表达式then 命令表1else  命令表2fi

在这里插入图片描述

分层结构2:

if 表达式1then 命令表1elif  表达式2then命令表2elif 表达式3then 命令表3else命令表4fi

嵌套结构:

if      表达式then 命令表1else  if    表达式then  命令表fi  fi

在这里插入图片描述

注意:如果表达式为真, 则执行命令表中的命令; 否则退出if语句, 即执行fi后面的语句。 if和fi是条件语句的语句括号, 必须成对使用;命令表中的命令可以是一条, 也可以是若干条。

2、case…esac

case   字符串变量   in模式1)命令表1;;(相当于C语言中的break)模式2)命令表2;;……*)命令表n;;esac

注意:
1)case语句只能检测字符串变量
2)命令表以单独的双分号行结束,退出case语句
3)模式 n常写为字符* 表示所有其它模式
4)case匹配项中可以存在多个模式,
在这里插入图片描述
在这里插入图片描述

3、for…do…done

格式:

for   变量名   in   单词表do命令表done

变量依次取单词表中的各个单词,每取一次单词, 就执行一次循环体中的命令,循环次数由单词表中的单词数确定,命令表中的命令可以是一条, 也可以是由分号或换行符分开的多条。
在这里插入图片描述

for语句的几种书写格式:
(1)for i in 1 2 3 4 do…done :
变量i从单词表中取值
(2)for i do…done:
变量i从命令行取值,可以省略in 单词表

(3)for i in {1…10} do…done:
(大括号和数字之间不加空格)
变量i从1~10
(4)for ((i = 0; i < 10; i++)) do…done

shell脚本的死循环
(1)

for((;;))
doecho "for"done

(2)

while true
doecho "while"
done

4、while…do…done

格式:

while  命令或表达式
do命令表
done

while语句首先测试其后的命令或表达式的值,
如果为真,就执行一次
然后再测试该命令或表达式的值,
执行循环体,直到该命令或表达式为假时退出循环。
在这里插入图片描述

相关文章:

shell脚本的编写以及shell中语句(嵌入式学习)

shell学习shell脚本编写步骤shell变量功能性语句1.read2.expr3.let4.test逻辑运算符的书写格式结构性语句1.if…then…fi2、case...esac3、for..do..done4、while..do..doneshell脚本 将shell命令按照一定的逻辑顺序实现指定功能&#xff0c;放到一个文件中。文件叫脚本文件&a…...

2023年高新技术企业怎么申报认定

成为高新技术企业可以获得国家和本地区的众多优惠政策&#xff0c;相信很多企业都想申请高企认定&#xff0c;国家高新技术企业又称国家高新技术企业&#xff0c;根据《高新技术企业认定管理办法》规定&#xff0c;国家高新技术企业是指在《国家重点支持的高新技术领域》内&…...

GIS状态检测新技术——振动分析法

提示&#xff1a;唐老师好&#xff0c;我之前因为“阳”了&#xff0c;所以就没有参与汇报&#xff0c;给老师带来不便&#xff0c;请老师见谅。以此篇文章代替课堂汇报。 文章目录前言一、不同故障对应的振动频谱和故障特征量二、GIS设备振动特征估计1.GIS设备状态空间2.粒子滤…...

Python进阶篇(一)-- Django快速上手

1 Django概述 Web框架&#xff0c;就是用于开发Web服务器端应用的基础设施&#xff0c;说得通俗一点就是一系列封装好的模块和工具。事实上&#xff0c;即便没有Web框架&#xff0c;我们仍然可以通过socket或CGI来开发Web服务器端应用&#xff0c;但是这样做的成本和代价在商业…...

读书笔记//来自公众号(1)

——【9大数据分析方法】—— 总结1&#xff1a;多部分方法用于定位问题&#xff0c;相关分析法与指标拆解法可以解释问题。 总结2&#xff1a;抓住两个关键因素&#xff1a;维度&#xff08;类别&#xff09;、指标 一、周期性分析 1.常见的周期包括2种&#xff1a;自然周期…...

10款让程序员用了会上瘾的工具

程序员必定会爱上的10款工具&#xff0c;相信肯定有不少是你的心头好&#xff0c;尤其是第4款。 第一款&#xff1a;TrueCryptTrueCrypt 可能很多人没用过&#xff0c;它是一个加密软件&#xff0c;能够对磁盘进行加密。还在担心自己电脑中的重要文件、私密档案被人查看&…...

类和对象(下)(一)

类和对象&#xff08;下&#xff09;&#xff08;一&#xff09;1.再谈构造函数1.1构造函数体赋值1.2初始化列表1.3explicit关键字2.static成员2.1概念2.2特性3.匿名对象&#x1f31f;&#x1f31f;hello&#xff0c;各位读者大大们你们好呀&#x1f31f;&#x1f31f; &#x…...

46.在ROS中实现global planner(2)

前文实现了一个global planner的模板&#xff0c;并且可以工作&#xff0c;本文将实现astar算法&#xff0c;为后续完成一个astar global planner做准备 1. AStar简介 1.1 AStar Astar算法是一种图形搜索算法,常用于寻路。Astar算法原理网上可以找到很多&#xff0c;简单的说…...

05- 泰坦尼克号海难生死预测 (机器学习集成算法) (项目五)

Kaggle: 一个数据建模和数据分析竞赛平台sns画柱状图: sns.barplot(datatrain,xPclass,ySurvived)查看数据分布(survived 和 fare): sns.FacetGrid(train,hueSurvived,aspect3) ageFacetsns.FacetGrid(train,hueSurvived,aspect3) ageFacet.map(sns.kdeplot,Fare,shadeTrue) …...

【python百炼成魔】python运算符的使用与输入输出函数

文章目录前言一. python 运算符1.1 算术运算符1.2 .赋值运算符1.3 比较运算符1.4. 布尔运算符二. 输入和输出函数2.1 print函数2.1.1 help函数查看帮助文档2.1.2 print的格式化输出2.2 format函数2.3 input数据接收函数写在最后前言 Python 中的运算符主要分为算术运算符、比较…...

uniapp实现app检查更新与升级-uni-upgrade-center详解

app检查更新与升级 参考链接&#xff1a; 升级中心uni-upgrade-center - App uni-admin h5 api App资源在线升级更新 uni-app使用plus注意事项 关于在线升级&#xff08;WGT&#xff09;的几个疑问 什么是升级中心uni-upgrade-center uniapp官方开发的App版本更新的插件&#…...

公司项目引入这种方式,开发应用真是又快又准!

试想一下&#xff0c;你开足马力提了一串需求&#xff0c;给开发精英团队也好&#xff0c;给外包也行&#xff0c;都要等个半年甚至更久才会给到你一个满意的产品&#xff0c;你是否还有动力&#xff1f; 这还不止&#xff0c;业务越来越复杂&#xff0c;最初的需求也在随着着…...

virtuoso数据库介绍

在国内&#xff0c;对海量 RDF 数据的管理有着迫切的实际需求&#xff1b; RDF&#xff1a;Resource Description Framework&#xff0c;是一个使用XML语法来表示的资料模型(Data model)&#xff0c;用来描述Web资源的特性&#xff0c;及资源与资源之间的关系。 Virtuoso可以对…...

linux高级命令之编辑器 vim

编辑器 vim学习目标能够说出vim的三种工作模式能够说出vim对应复制和粘贴命令1. vim 的介绍vim 是一款功能强大的文本编辑器&#xff0c;也是早年 Vi 编辑器的加强版&#xff0c;它的最大特色就是使用命令进行编辑&#xff0c;完全脱离了鼠标的操作。2. vim 的工作模式命令模式…...

分布式光伏储能系统的优化配置方法(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

Grafana loki部署及使用及问题处理方法(超详细)

一、下载软件 因为我是本地测试&#xff0c;所以用的windows版本的包&#xff0c;loki服务window版本的安装包下载地址&#xff1a;下载地址&#xff0c;选择 promtail-windows版本的安装包下载地址&#xff1a;下载地址 Grafana服务的下载地址&#xff1a;下载地址 二、配置…...

vue项目如何使用 SheetJS(xlsx)插件?

简言 SheetJS是一款非常好用的前端处理表格文件的工具。它分社区版和专业版&#xff0c;我们今天来介绍如何简单使用它的社区版。 SheetJS社区版官网 介绍 你应该打开官网浏览具体使用详情。 安装 打开官网在如上图的Installation板块中可以找到各种运行模块的使用方式。 …...

项目管理工具dhtmlxGantt甘特图入门教程(九):支持哪些数据格式(上篇)

dhtmlxGantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表&#xff0c;可满足项目管理控件应用程序的所有需求&#xff0c;是最完善的甘特图图表库这篇文章给大家讲解 dhtmlxGantt 的数据属性和数据库结构。 DhtmlxGantt正版试用下载&#xff08;qun&#xff1a;764…...

iView Table合并单元格(行、列)

行/列合并设置属性 span-method 可以指定合并行或列的算法。该方法参数为 4 个对象&#xff1a;row: 当前行column: 当前列rowIndex: 当前行索引columnIndex: 当前列索引该函数可以返回一个包含两个元素的数组&#xff0c;第一个元素代表 rowspan&#xff0c;第二个元素代表 co…...

如何用P6软件编制项目进度计划(下)

卷首语 根据项目合同包含的工作范围进行工作分解&#xff08;WBS&#xff09;&#xff0c;按照业主的要求及项目管理的需要&#xff0c;考虑不同阶段和层次&#xff0c;适时编制出项目管理所要求的的各级进度计划。 4搜集项目计划与进度控制相关信息 搜集与项目计划编制与进…...

环境配置完整指导——Installing C++ Distributions of PyTorch

目录一、前言二、动手开始做1. 安装cuda 11.42. 安装visual studio 2019 community3. 安装libtorch4. 安装mingw-w645. 配置环境变量6. 打开vscode开始写程序7. 运行程序8. 其他报错信息文章简介&#xff1a;这篇文章用于介绍在windows10 vscode中&#xff0c;跑通如下代码的全…...

深度学习——自注意力机制和位置编码(笔记)

1.自注意力&#xff1a; ①在深度学习中&#xff0c;经常使用卷积神经网络或者循环神经网络对序列进行编码 ②对于key,value和query&#xff0c;自注意力有一套自己的选法&#xff0c;因为key&#xff0c;value和query的值来自同一组输入。因此被称为自注意力或内部注意力 2…...

内网渗透(三十)之横向移动篇-利用远控工具向日葵横向移动

系列文章第一章节之基础知识篇 内网渗透(一)之基础知识-内网渗透介绍和概述 内网渗透(二)之基础知识-工作组介绍 内网渗透(三)之基础知识-域环境的介绍和优点 内网渗透(四)之基础知识-搭建域环境 内网渗透(五)之基础知识-Active Directory活动目录介绍和使用 内网渗透(六)之基…...

自动化测试中,该如何高效管理测试数据?

今晚在某个测试群&#xff0c;看到有人问了一个问题&#xff1a;把测试数据放配置文件读取和放文件通过函数调用读取有什么区别&#xff1f; 当时我下意识的这么回答&#xff1a;数据量越大&#xff0c;配置文件越臃肿&#xff0c;放在专门的数据文件&#xff08;比如excel&am…...

Qt中项目A调用另一个项目B的方法汇总

在开发一个软件项目时候&#xff0c;当涉及到一个模块&#xff0c;已经有过类似的项目开发&#xff0c;为了避免重复开发&#xff0c;涉及到在该项目的工程中调用已开发的项目作为子项目&#xff0c;有很多种方法。 一、将项目编译成库文件然后进行调用 调用库文件通常有两种…...

【项目精选】基于Javaee的影视创作论坛的设计与实现(视频+论文+源码)

点击下载源码 基于Javaee的影视创作论坛的设计与实现主要用功能包括&#xff1a; 首页推荐、用户管理、影片管理、评论管理、 预告片管理、海报管理、公告管理、数据检索、用户注册与登录等等功能、统结构如下 &#xff08;1&#xff09;后台管理: 管理模块&#xff1a;管理员…...

深入【虚拟列表】动态高度、缓冲、异步加载... Vue实现

前言&#x1f380; 在前文中我们了解到&#xff1a; 1.在某种特殊场景下&#xff0c;我们需要将 大量数据 使用不分页的方式渲染到列表上&#xff0c;这种列表叫做长列表。 2.因为事件循环的机制&#xff0c;一次性大量的渲染耗时较长&#xff0c;并且渲染期间会阻塞页面交互…...

Windows 11 + WSL(ubuntu 20.04) + CLion(2022.3) 编译OpenJDK12

编译OpenJDK12 目录编译OpenJDK12前言一、下载OpenJDK源码二、编译OpenJDK参考https://openjdk.org/groups/build/doc/building.html1&#xff1a;安装编译所需的组件2&#xff1a;执行编译命令3&#xff1a;验证编译结果三、在Clion中调试OpenJDK源码1&#xff1a;Clion中配置…...

Freemarker 语法精粹

文章目录说明基本用法宏加载宏定义宏文件写法import和include区别内置方法注册全局共享变量处理空值和默认值获得hashmap的键值从map中拿对象遍历Map其它小技巧迁移事项参考说明 Freemarker 还存在我的一些老项目中&#xff0c;比起前端框架&#xff0c;自有它的简便之处&…...

使用Benchto框架对Trino进行SQL性能对比测试

有时需要对魔改源码前后的不同版本Trino引擎进行性能对比测试&#xff0c;提前发现改造前后是否有性能变差或变好的现象&#xff0c;避免影响数据业务的日常查询任务性能。而Trino社区正好提供了一个性能测试对比框架&#xff1a;GitHub - trinodb/benchto: Framework for runn…...

网站策划编辑/青岛关键词网站排名

java中除了基础类型外的变量类型&#xff0c;全部都是引用类型&#xff0c;与C和C的指针类似。 在内存中区别类和对象&#xff1a; 类似静态的概念&#xff0c;首先放在在代码区&#xff0c;声明的局部变量放在堆栈中。 对象动态概念&#xff0c;放入堆内存。 为什么new出来的东…...

广州门户网站开发/搜索引擎优化的技巧

1、 Java中值类型和引用类型的不同&#xff1f; [定义] 引用类型表示你操作的数据是同一个&#xff0c;也就是说当你传一个参数给另一个方法时&#xff0c;你在另一个方法中改变这个变量的值&#xff0c; 那么调用这个方法是传入的变量的值也将改变.值类型表示复制一个当前变量…...

做网站的域名/张家港seo建站

WPF 程序出现&#xff1a; 参数计数不匹配&#xff0c;未处理System.Reflection.TargetParameterCountException解决方法引用http://www.cnblogs.com/wene/p/4668830.html根据调试的实际情况显示&#xff0c;委托出现问题&#xff0c;此异常是在使用Invoke调用时&#xff0c;没…...

dw做网站如何让用户可编辑/广东河源最新疫情

随着 Elastic 扩展我们的 Elasticsearch Service Cloud 产品和自动上线&#xff0c;我们已经将 Elastic Stack 的受众范围从完整的运营团队扩展到了数据工程师&#xff0c;安全团队和顾问。作为 Elastic 支持团队的代表&#xff0c;我喜欢与更多用户背景甚至更广泛的用例进行交…...

怎么做网站的快照/澳门seo关键词排名

今天在用SQL Server 2008执行一个SQL脚本文件时&#xff0c;引发类型为“System.OutOfMemoryException”的异常错误&#xff0c;脚本明明是从SQL Server 2008导出的 出现这个错误的主要原因是由于SQL脚本文件太大&#xff0c;估计超过了100M了转载于:https://www.cnblogs.com/x…...

网站建设与规划/软文写作的十大技巧

文章目录参考资料1. 线性回归1.1 概述应用举例1.2 分析1.3 对数线性回归1.4 过拟合、欠拟合如何解决L2正则化(岭回归)L1正则化(Lasso回归)ElasticNet回归1.5 线性回归要求因变量服从正态分布&#xff1f;2. 对数几率回归(logistic 回归&#xff09;2.1 概述2.2 优点2.3 求解2.4…...