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

news2024/12/29 11:44:45

1 Shell脚本概述

1.1Shell脚本概述

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

1.2Shell脚本编写流程

 第一个Shell脚本文件

#!/bin/bash

echo "hello world"
执行方式
        bash test.sh
        source  test.sh
        ./test.sh

2 Shell脚本变量

2.1变量介绍

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

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

2.2变量的作用

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

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

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

2.3变量的命名要求

2.4变量的分类

2.4.1 用户自定义变量

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

在shell编程中通常使用全大写变量,方便识别
$ COUNT=1
变量的调用:在变量前加$ 
$ echo $COUNT



Linux 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  \*  3
  27
  $ expr  3  -  8  /  2
  -1
  $ num=9
  $ sum=`expr  $num  \*  6 `
  $ echo  $sum
  54

示例

 这里+前后需要空格

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.coloradmin.cn/o/974746.html

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

相关文章

大数据平台数据安全具体措施有哪些?有推荐的吗?

大数据平台是企业处理和分析数据的重要工具之一,也是企业数据存储的重要载体,因此保障大数据平台安全至关重要。那你知道大数据平台数据安全具体措施有哪些?有推荐的吗? 大数据平台数据安全具体措施有哪些? 1、数据…

LeetCode 138. Copy List with Random Pointer【链表,DFS,迭代,哈希表】中等

本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…

四维纵横与用友达成战略合作,携手打造企业数据智能新基座

近日,北京四维纵横数据技术有限公司(四维纵横 YMatrix)与用友网络科技股份有限公司(用友),宣布达成产品战略合作协议。双方将共同致力于为企业提供一站式数据智能解决方案,加速企业应用的全方位…

linux sed 删除空行、替换文本

假设文件:sed.txt first second third fourfive①删除four、five之间的空行 ②替换first为hsj is smart cat sed.txt | sed /^$/d | sed s/first/hsj is smart/g

【Unity-Cinemachine相机】相机跟随之Transposer属性

相机跟随和瞄准行为 Transposer:虚拟相机将在某个固定的偏移或距离上跟随目标移动 上面的偏移量就是Follow Offset Binding Mode决定Follow Offset是目标本地坐标系下的身后十米还是世界坐标系下的身后十米 Lock To Target On Assign:锁定自己和目标本地…

论文浅尝 | 训练语言模型遵循人类反馈的指令

笔记整理:吴亦珂,东南大学硕士,研究方向为大语言模型、知识图谱 链接:https://arxiv.org/abs/2203.02155 1. 动机 大型语言模型(large language model, LLM)可以根据提示完成各种自然语言处理任务。然而&am…

【LeetCode-中等题】208. 实现 Trie (前缀树)

文章目录 题目方法一:利用数组构建26叉树方法二:利用哈希表构建26叉树 题目 方法一:利用数组构建26叉树 插入图示: 全搜索和前缀搜索: 注意:全局匹配匹配完直接返回插入时的标志位 而前缀匹配时&#xff…

Vagrant命令

文章目录 1.介绍2.下载3. 配置3.1 配置环境变量3.2 在xshell中连接使用 4. 相关命令4.1 Box相关4.2 初始化环境4.4 虚拟机相关 1.介绍 Vagrant 是一个虚拟机管理工具 2.下载 https://www.vagrantup.com/ 3. 配置 3.1 配置环境变量 测试安装是否成功 3.2 在xshell中连接使…

MybatisPlus插件功能详细介绍 自动分页 通用分页实体

本课程全面讲解了Mybatis框架的使用,从快速入门到原理分析再到实战应用。每一个知识点都有案例进行演示学习,最终通过学习你将全面掌握,从而使Mybatis的开发更加的高效,系统学习 通过项目的开发大家应该能发现,单表的C…

同是卫星,华为Mate 60 pro的天通卫星和北斗卫星有何区别?

作为一个海钓爱好者,在看到华为Mate 60 Pro带有卫星通话功能那一刻,我就知道,我的钱包要-7000了——因为卫星通话功能,对于我们这类有着小众爱好的人群来说,实在太需要了。 对比北斗卫星短消息,Mate 60 Pr…

[git] 如何克隆仓库,进行项目撰写,并绑定自己的远程仓库

摘要:删除.git文件,才可重新绑定远程仓库。 具体步骤: 文件夹右键,进入”Git Bash Here“执行命令 1. 执行 ”git clone 仓库地址“,克隆仓库 2. 在生成的仓库中,删除 .git 文件 3. git init 初始化仓库…

3D渲染:面法线和顶点法线

现在我们回顾了影响对象外观的参数(它们的亮度、颜色等),我们准备开始研究一些简单的着色技术。 推荐:用 NSDT编辑器 快速搭建可编程3D场景 1、法线 法线在着色中起着核心作用。 大家都知道,如果我们将物体朝向光源&a…

Unity ShaderGraph教程——进阶shader(水面、积雪,数字线框)

1.水面(一) 公式:场景深度 节点深度 — 屏幕空间位置的W向量 半透明物体与不透明物体的相交边缘 原理:场景深度 节点深度包含透明像素,屏幕空间w向量不包含透明像素。 注意:需要在UniversalRP-xxxQuali…

diskqueue怎么写入消息,怎么对外发送消息

nsq中diskqueue是nsq消息持久化的核心,内容较多,一共分为多篇 1. diskqueue是什么,为什么需要它,整体架构图,对外接口_YZF_Kevin的博客-CSDN博客 2. diskqueue的元数据文件,数据文件,启动入口…

成都睿趣科技:现在开一家抖音小店还来得及吗

随着社交媒体的迅猛发展,抖音已经成为了一个全球范围内广受欢迎的社交平台。在这个短视频应用上,人们分享着各种各样的内容,从搞笑段子到美食教程,再到时尚搭配和手工艺品制作。随着用户数量的不断增长,很多人都在思考…

Python第三方库 - matplotlib库

1 matplotlib了解 Matplotlib 可能是 Python 2D - 绘图领域使用最广泛的套件。它能让使用者很轻松地将数据图形化,并且提供多样化的输出格式。这里将会探索 matplotlib 的常见用法。 2 matplotlib学习 2.1 引用 plt 表示当前子图,若没有就创建一个子图 …

x64dbg的安装

一、安装地址: 地址 解压目录 点击x96dbf.exe 二、使用 1.反汇编窗口 这个位置显示的是需要分析的程序的反汇编代码。在第一个区域的最左侧例如“7712EAA3”这一列就是内存地址区域,接着“E8 07”就是汇编指令的opcode,“jmp xxxxxxxxx”这…

天津Java培训机构 Java的发展空间如何?

在当今互联网时代,计算机技术的发展日新月异,越来越多人看到IT行业的广泛前景,纷纷想要转行成为一名程序员,作为一名IT从业人员,学习一门编程语言是必不可少的,而在众多编程语言中,Java无疑是较…

存储数据恢复- raid5多块硬盘出现坏道的数据恢复案例

存储数据恢复环境: 某单位一台存储,1个机头4个扩展柜,有两组分别由27块和23块硬盘组建的RAID5阵列。其中由27块磁盘组建的那一组RAID5阵列崩溃,这组RAID5阵列存放是Oracle数据库文件。存储系统上层共划分了11个卷。 存储故障&…

【工具】Linux下常用录屏软件

🐚作者简介:花神庙码农(专注于Linux、WLAN、TCP/IP、Python等技术方向)🐳博客主页:花神庙码农 ,地址:https://blog.csdn.net/qxhgd🌐系列专栏:善假于物&#…