lv3 嵌入式开发-6 linux shell脚本编程(概念、变量、语句)

1 Shell脚本概述

1.1Shell脚本概述

 Shell脚本是利用 shell 的功能所写的一个程序。这个程序是使用纯文本文件,将一些 shell 的语法与命令(含外部命令)写在里面,搭配正则表达式、管道命令与数据流重定向等功能

1.2Shell脚本编写流程

 第一个Shell脚本文件

#!/bin/bashecho "hello world"
执行方式bash test.shsource  test.sh./test.sh

2 Shell脚本变量

2.1变量介绍

变量来源于数学,是计算机语言中能储存计算结果或能表示值的抽象概念。  

变量可以通过变量名访问。在指令式语言中,变量通常是可变的

2.2变量的作用

用来存放系统和用户需要使用的特定参数(值)  

变量名:使用固定的名称,由系统预设或用户定义  

变量值:能够根据用户设置、系统环境的变化而变化

2.3变量的命名要求

2.4变量的分类

2.4.1 用户自定义变量

变量可以再终端中使用,也可以代码中使用

在shell编程中通常使用全大写变量,方便识别
$ COUNT=1
变量的调用:在变量前加$ 
$ echo $COUNTLinux Shell/bash从右向左赋值
$Y=y
$ X=$Y
$ echo $X 
y 使用unset命令删除变量的赋值 
$ Z=hello 
$ echo $Z 
hello 
$ unset Z 
$ echo $Z 

取值 

双引号: 允许通过$符号引用其他变量值(不加引号也一样echo $COUNT echo "$COUNT")

        弱引用,其中的变量引用会被替换为变量值

单引号: 禁止引用其他变量值,$视为普通字符

        强引用,其中的变量引用不会被替换为变量值,而保持源字符串

反撇号: 命令替换,提取命令执行后的输出结果,``和$(…)作用相同

数组

#array数组
a=(1 2 3 4 5)
echo $a:默认显示数组a的第一个元素
echo ${a[0]} :显示数组中第一个元素,以此类推
echo ${a[-1]}: 显示数组中最后一个元素
echo ${a[*]} 和echo ${a[@]} :显示数组中所有元素
echo ${#a[@]} :显示数组中元素的个数
echo ${a[@]:起始元素id:元素个数]} :显示数组中以起始元素为首的指定个数的元素(注意:这里起始元素id不能为负值
unset a[n] 删除数组中的第n个元素
unset a 删除a这个数组

2.4.2 只读变量

变量值不允许修改(重新赋值)的情况

无法使用 unset删除

最快方法重启

readonly

readonly COUNT=3

2.4.3 位置变量和预定义变量


$0    与键入的命令行一样,包含脚本文件名
$1,$2,……$9 ${10} 分别包含第一个到第十个命令行参数
$#     包含命令行参数的个数
$@     包含所有命令行参数:“$1,$2,……$9”
$*     包含所有命令行参数,是一个整体:“$1,$2,……$9”
$?     包含前一个命令的退出状态
$$     包含正在执行进程的ID号

 示例:

#!/bin/bash
echo $0
echo $1
echo $2
echo $3
echo $#
执行
./test.sh 1 2 3 4 5
输出
./test.sh
1
2
3
5   //一共传入了5个

 

2.4.4 环境变量

$USER 表示用户名称
$HOME 表示用户的宿主目录
$LANG 表示语言和字符集
$PWD 表示当前所在工作目录
$PATH 表示可执行用户程序的默认路径
export可以将变量指定为全局变量

示例

3 Shell语句

3.1 Shell程序

Shell 程序由零或多条shell语句构成。 shell语句包括三类:

说明性语句  功能性语句  结构性语句。

3.2 说明性语句

说明性语句(注释行)

以#号开始到该行结束,不被解释执行 注释行可以出现在程序中的任何位置,既可以单独占用一行, 也可以接在执行语句的后面. 以#号开始到所在行的行尾部分,都不被解释执行. 例如:

#! /bin/sh 
# 
# 本程序说明
#
command_1 
command_2                  # command_2的语句说明
……
# 下面程序段的说明
command_m
……
command_n                  # command_n语句的说明
……

3.3 功能性语句

read从标准输入读入一行, 并赋值给后面的变量,其语法为:

read  var  //  把读入的数据全部赋给var

示例: 

把读入行中的第一个单词(word)赋给var1, 第二个单词赋给var2, ……把其余所有的词赋给最后一个变量. 如果执行read语句时标准输入无数据, 则程序在此停留等侯, 直到数据的到来或被终止运行。  -t 跟随等待事件 -p 跟随终端的提示信息 -s输入不回显

示例:

算术运算命令expr主要用于进行简单的整数运算,包括加(+)、减(-)、乘(\*)、整除(/)和求模(%)等操作。例如:$ expr  12  +  5  \*  327$ expr  3  -  8  /  2-1$ num=9$ sum=`expr  $num  \*  6 `$ echo  $sum54

示例

 这里+前后需要空格

test语句可测试三种对象:           字符串     整数     文件属性

条件成立输出0  条件不成立输出1

每种测试对象都有若干测试操作符 

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

示例:

 注意 加上双引号减少错误,否则会显示0

整数测试 
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

示例:

文件测试
-e name    测试一个文件是否存在
-d name    测试name 是否为一个目录
-f name     测试name 是否为普通文件
-L name    测试name 是否为符号链接
-r name     测试name 文件是否存在且为可读
-w name   测试name 文件是否存在且为可写
-x name    测试name 文件是否存在且为可执行
-s name    测试name 文件是否存在且其长度不为0
f1 -nt f2    测试文件f1 是否比文件f2 更新
f1 -ot f2    测试文件f1 是否比文件f2 更旧

示例:

3.4 结构性语句

结构性语句主要根据程序的运行状态、输入数据、变量的取值、控制信号以及运行时间等因素来控制程序的运行流程。 主要包括:

条件测试语句(两路分支)

多路分支语句

循环语句

循环控制语句等

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

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

相关文章

[JAVA] byte与int的类型转换案例剖析

总结: ①没有byte的字面值,赋值时需要强制转换类型 ②涉及运算,系统自动进行类型升级,由此用final修饰,代表这是一个不会更改值的常量,通过编译 感受:还是用int吧,自动类型转换太复…

Java程序员所需Javascript知识

它是一种脚本语言&#xff0c;可以用来更改页面内容&#xff0c;控制多媒体&#xff0c;制作图像、动画等等 js 代码位置 <script>// js 代码 </script>引入 js 脚本&#xff0c;在js脚本中写js代码 <script src"js脚本路径"></script>注…

滑动窗口实例7(串联所有单词的子串)

题目&#xff1a; 给定一个字符串 s 和一个字符串数组 words。 words 中所有字符串 长度相同。 s 中的 串联子串 是指一个包含 words 中所有字符串以任意顺序排列连接起来的子串。 例如&#xff0c;如果 words ["ab","cd","ef"]&#xff0c;…

OpenCV之形态学操作

形态学操作包含以下操作&#xff1a; 腐蚀 (Erosion)膨胀 (Dilation)开运算 (Opening)闭运算 (Closing)形态梯度 (Morphological Gradient)顶帽 (Top Hat)黑帽(Black Hat) 其中腐蚀和膨胀操作是最基本的操作&#xff0c;其他操作由这两个操作变换而来。 腐蚀 用一个结构元素…

简述视频智能分析EasyCVR视频汇聚平台如何通过“AI+视频融合”技术规避八大特殊作业风险

视频智能分析EasyCVR视频汇聚平台可以根据不同的场景需求&#xff0c;让平台在内网、专网、VPN、广域网、互联网等各种环境下进行音视频的采集、接入与多端分发。在视频能力上&#xff0c;视频云存储平台EasyCVR可实现视频实时直播、云端录像、视频云存储、视频存储磁盘阵列、录…

noetic 怎么下载robotiq_modbus_tcp 从而使用robotiq二指夹爪

1&#xff0c;会科学上网 2&#xff0c; # Modbus TCP rosdep install robotiq_modbus_tcp3&#xff0c;报错 4&#xff0c;去robotiq的功能包里面找两个大爷&#xff08;tmd&#xff09; 分别修改package.xml 本来是python &#xff0c; 然后分别修改成python3 然后参考其他…

aws-msk-托管kafka集群的简单使用(VPC内部访问:无验证和SASL认证)

1.使用控制台创建即可 根据实例类型创建需要至少15分以上&#xff0c;可以提前创建好ec2实例和Secrets Manager,一会会使用到 2. 创建Secrets Manager &#xff08;使用无认证时请跳过&#xff09; 官方文档&#xff1a;https://docs.aws.amazon.com/zh_cn/msk/latest/deve…

Docker实战:docker compose 搭建Rocketmq

1、配置文件准备 1.1、 新建目录&#xff1a;/home/docker/data/rocketmq/conf mkdir /home/docker/data/rocketmq/conf1.2、 在上面目录下新建文件broker.conf文件&#xff0c;内容如下 brokerClusterName DefaultCluster brokerName broker-a brokerId 0 deleteWhen 0…

[react基础]关于v6版本route的变化,以及常见应用模式

该说不说,在做这些之前,你要记得一件事 route不是react或者vue等原本就有的组件!需要你手动下载!然后导入! 原本的框架只是最终挂载到一个html界面上!!! 别再问我为啥你扒下来的代码为啥不好使了! 讨厌 > _< 下载指令去看我另一篇推文 今天复盘了一下自己的实训…

2023年数学建模国赛A 定日镜场的优化设计思路分析

构建以新能源为主体的新型电力系统&#xff0c;是我国实现“碳达峰”“碳中和”目标的一项重要措施。塔式太阳能光热发电是一种低碳环保的新型清洁能源技术[1]。定日镜是塔式太阳能光热发电站&#xff08;以下简称塔式电站&#xff09;收集太阳能的基本组件&#xff0c;其底座由…

论数据库的种类

摘要 数据库是现代信息管理和数据存储的重要工具&#xff0c;几乎在各个领域都有广泛应用。不同类型的数据库适用于不同的应用场景和需求。本文将介绍几种常见的数据库种类&#xff0c;并探讨它们的特点和适用范围。 正文 一、关系型数据库&#xff08;RDBMS&#xff09; 关…

IntelliJ IDEA中那些让你相见恨晚超好用插件

InteIIiJ IDEA 2023.2版本发布了,在2023.2中&#xff0c;官方根据用户的宝贵反馈对新UI做出了大量改进&#xff0c;新UI界面大大减少了干扰&#xff0c;可以让用户更好地专注于代码。相信很多同学都已经迫不及待地尝试了。 安装激活好 Intellij idea 之后&#xff0c;再搭配如下…

小米手机便签怎么导出到华为mate60Pro手机上?

华为mate60Pro手机于2023年8月29日发布了先锋计划&#xff0c;有不少网友都抢到了这款新机。而有一些网友表示自己在换手机之前遇到了问题&#xff0c;这就是之前使用的手机是小米&#xff0c;所以需要把重要的图片、短信、通讯录、便签等数据导出到新的手机上&#xff0c;但是…

使用ChatGLMTokenizer处理json格式数据

我下载了一些中文wikipedia数据&#xff0c;准备采用ChatGLMTokenizer对齐进行清洗&#xff0c;整理为预训练语料。 import numpy as np import json from tqdm import tqdm from chatglm_tokenizer.tokenization_chatglm import ChatGLMTokenizertokenizer ChatGLMTokenizer…

yolov7添加注意力机制

yolov7结构图 方法&#xff1a;直接在common里改&#xff0c;在相关的后面加上就行 1、接受通道数的注意力机制 1、目的&#xff1a;在三个输出地方添加注意力 yolov7.yaml文件&#xff0c;换成其他模块 注意力链接 2、models下建SE.py 3、common.py下&#xff0c;先找c…

数据库概念

定义&#xff1a; 数据库&#xff08;Database 简称DB&#xff09;是持久存储有组织/可共享数据/的容器 数据库管理系统(MySQL、Oracle、DB2)是操作/和管理数据库/的软件 分类&#xff1a; 关系(型)数据库 (MySQL、Oracle、SQL Server、SQLite、DB2) 非关系(型)数据库 (Redis…

Centos 7 通过Docker部署OnlyOffice

前言&#xff1a; 在本文中&#xff0c;我们将详细介绍如何使用 Docker 部署功能强大的协作办公套件 OnlyOffice。通过 Docker&#xff0c;您可以轻松构建、部署和管理 OnlyOffice&#xff0c;从而提高团队协作和企业办公的效率。 一、安装Docker 1、向系统添加Docker CE软件仓…

Qt简易闹钟

配置文件 QT core gui texttospeechgreaterThan(QT_MAJOR_VERSION, 4): QT widgetsCONFIG c11# The following define makes your compiler emit warnings if you use # any Qt feature that has been marked deprecated (the exact warnings # depend on your compi…

Json“牵手”当当网商品详情数据方法,当当商品详情API接口,当当API申请指南

当当网是知名的综合性网上购物商城&#xff0c;由国内著名出版机构科文公司、美国老虎基金、美国IDG集团、卢森堡剑桥集团、亚洲创业投资基金&#xff08;原名软银中国创业基金&#xff09;共同投资成立1。 当当网从1999年11月正式开通&#xff0c;已从早期的网上卖书拓展到网…

【JAVA】Object类与抽象类

作者主页&#xff1a;paper jie_的博客 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文录入于《JAVASE语法系列》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白精心打造的。笔者用重金(时间和…