嵌入式培训-Linux系统及C编程高级-DAY6-linux shell脚本编程

news2024/11/18 0:43:19

Shell脚本概述

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

Shell脚本编写流程

Shell脚本的文件扩展名一定是 .sh

命令、选项、参数之间用空格隔开

第一个Shell脚本文件

执行方式        

bash test.sh        

source  test.sh        

./test.sh     

变量介绍

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

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

变量的作用

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

变量名:使用固定的名称,一部分变量由系统预设,另一部分变量由用户定义  

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

变量的命名要求

变量的分类

用户自定义变量

在shell编程中通常使用全大写变量,方便识别

$ COUNT=1 (注意!!运算符前后不能加空格,这点与C语言不同)

变量的调用:在变量前加$

$ echo $COUNT

Linux Shell/bash从右向左赋值

$Y=y

$ X=$Y

$ echo $X

y 使用unset命令删除变量的赋值

$ Z=hello

$ echo $Z

hello

$ unset Z

$ echo $Z

用户自定义变量-取值

双引号: 允许通过$符号引用其他变量值

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

单引号: 禁止引用其他变量值,$视为普通字符 强引用,其中的变量引用不会被替换为变量值,而保持源字符串

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

shell脚本中,注释是用#表示

用户自定义变量-数组

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这个数组

shell的数组的元素下标编号也是从0开始

只读变量

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

无法使用 unset删除  

最快方法重启  

readonly

位置变量和预定义变量

$0    与键入的命令行一样,包含脚本文件名

$1,$2,……$9 ${10} 分别包含第一个到第十个命令行参数

$#     包含命令行参数的个数(#代表可以自己写的数字)

$@   包含所有命令行参数:“$1,$2,……$9”

$*     包含所有命令行参数,是一个整体:“$1,$2,……$9”

$?     包含前一个命令的退出状态

$$     包含正在执行进程的ID号

环境变量

常用环境变量

$USER 表示用户名称

$HOME 表示用户的宿主目录

$LANG 表示语言和字符集

$PWD 表示当前所在工作目录

$PATH 表示可执行用户程序的默认路径  

export可以将变量指定为全局变量

Shell程序

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

说明性语句  

功能性语句  

结构性语句。

说明性语句(注释行)

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

#! /bin/sh

#

# 本程序说明

#

command_1 command_2                  # command_2的语句说明

……

# 下面程序段的说明

command_m

……

command_n                  # command_n语句的说明

……

功能性语句(命令)

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

read  var      

把读入的数据全部赋给var      

 read  var1  var2  var3      (多个数据以空格隔开)

把读入行中的第一个单词(word)赋给var1, 第二个单词赋给var2, ……把其余所有的词赋给最后一个变量. 如果执行read语句时标准输入无数据, 则程序在此停留等侯, 直到数据的到来或被终止运行。

read -p “想要打印的字符串”指定想要输入的提示

read -t n 等待输入n秒

 -s 是输入隐藏,密码。 

功能性语句(命令)

算术运算命令expr主要用于进行简单的整数运算,包括加(+)、减(-)、乘(\*)、整除(/)和求模(%)等操作。例如:  

$ expr  12  +  5  \*  3   (加号两边没空格,则加号原样输出,不会进行运算。加号两边若有空格,则进行运算)

27  

$ expr  3  -  8  /  2  

-1  

$ num=9  

$ sum=`expr  $num  \*  6 `   (expr不能直接赋值,要加``)

$ echo  $sum  

54

test语句可测试三种对象:          

字符串     整数     文件属性

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

 字符串测试

s1 = s2       测试两个字符串的内容是否完全一样 (条件成立0,条件不成立1)

s1 != s2    测试两个字符串的内容是否有差异

-z s1                  测试s1 字符串的长度是否为0

-n s1                  测试s1 字符串的长度是否不为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 更旧

结构性语句

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

主要包括:

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

多路分支语句

循环语句

循环控制语句等

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

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

相关文章

luceda ipkiss教程 45:在版图上加LOGO

**在设计版图时往往需要加上公司或者学校的LOGO,只需要LOGO的图片,通过代码就可以将LOGO加到版图上,比如: ** 通过代码可以得到版图上的LOGO: ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/8daea33f74f342ed9f506ae5d8cea711.…

求导公式,求导的四则运算,复合函数求导

求导公式 求导的四则运算 复合函数求导

原码、反码、补码、大端、小端

原码、反码、补码 计算机中的整数有三种2进制表示方法,即原码、反码和补码。 三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”, 而数值位: 正数的原、反、补码都相同。负整数的三种表…

接触huggingface

接触huggingface finetuning llama 按照https://github.com/samlhuillier/code-llama-fine-tune-notebook/tree/main中的教程一步一步了解。 pip install !pip install githttps://github.com/huggingface/transformers.gitmain bitsandbytes # we need latest transforme…

QGIS003:【06工程工具栏】-新建打开保存工程、新建打印布局、布局管理器、样式管理器

摘要:QGIS工程工具栏包括新建工程、打开工程、保存工程、新建打印布局、布局管理器、样式管理器等选项,本文介绍各选项的基本操作。 实验数据: 链接:https://pan.baidu.com/s/1f8tteqbum-Ekc7ZPdQRuEg?pwd=0s1i 提取码:0s1i 一、新建工程 【工具功能】:该功能用于创…

JAVA+SSM+springboot+MYSQL企业物资库存进销存管理系统

。该系统从两个对象:由管理员和员工来对系统进行设计构建。主要功能包括首页、个人中心、员工管理、项目信息管理、仓库信息管理、供应商管理、项目计划管理、物资库存管理、到货登记管理、物资出库管理、物资入库管理等功能进行管理。本企业物资管理系统方便员工快…

12.8 作业 C++

使用手动连接,将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中,在自定义的槽函数中调用关闭函数 将登录按钮使用qt5版本的连接到自定义的槽函数中,在槽函数中判断ui界面上输入的账号是否为"admin",密码是否为…

SQL语句---创建索引

介绍 使用sql语句实现创建索引。使用索引的优点是提升查询效率,使查询速度更快。 命令 alter table 表名 add 索引类型 索引名 (字段名);用alter table添加索引与create index区别,可以参考文章:https://www.cnblogs.com/jelly12345/p/173…

Arduino驱动MPX5700AP气压传感器(压力传感器)

目录 1、传感器特性 2、硬件原理图 3、控制器和传感器连线图 4、驱动程序 4.1、采集数据 4.2、校准传感器 MPX5700AP测量范围15~700kPa,支持I2C数字输出,可以根据已知气压值进行标定,可以快速、准确的测量管路或其他环境中的气压值。…

mysql的BIT数值类型

MySQL :: MySQL 8.2 Reference Manual :: 11.1.5 Bit-Value Type - BIT MySQL :: MySQL 8.2 Reference Manual :: 9.1.5 Bit-Value Literals BIT类型用来存放bit值,每一位是0或者1,允许1-64位。 例如,下面表定义了new这列的类型为8位的BIT…

线性回归实战

3.1 使用正规方程进行求解 3.1.1 简单线性回归 公式 : y w x b y wx b ywxb 一元一次方程,在机器学习中一元表示一个特征,b表示截距,y表示目标值。 使用代码进行实现: 导入包 import numpy as np import matp…

普冉(PUYA)单片机开发笔记(8): ADC-DMA多路采样

概述 上一个实验完成了基于轮询的多路 ADC 采样,现在尝试跑一下使用 DMA 的 ADC 多路采样。厂家例程中有使用 DMA 完成单路采样的,根据这个例程提供的模板,再加上在 STM32 开发同样功能的基础,摸索着尝试。 经过多次修改和测试&…

stm32使用多串口不输出无反应的问题(usart1、usart2)

在使用stm32c8t6单片机时,由于需要使用两个串口usart1 、usart2。usart1用作程序烧录、调试作用,串口2用于与其它模块进行通信。 使用串口1时,正常工作,使用串口2时,无反应。查阅了相关资料串口2在PA2\PA3 引脚上。RX…

Tomcat部署开源站点JPress

前言 JPress使用Java开发,是我们常见的开源博客系统。JPress是一个开源的WordPress插件,它提供了一个简单而强大的方式来创建企业级站点。该插件包括许多特性,例如主题定制、页面构建器、性能优化、SEO、安全、电子商务和社交媒体整合等。使用…

【无标题】安装环境

这里写目录标题 清华镜像加速 安装cuda11.3 PyTorch 1.10.1https://pytorch.org/get-started/previous-versions/[如果没有可以点Previous pyTorch Versions,这里面有更多的更早的版本](https://pytorch.org/get-started/locally/) 复制非空文件夹cp: -r not specif…

【calcitonin ; 降钙素 ;降钙素原】

Parathyroid_Hormone -甲状旁腺激素 PTH ; 特立帕肽;

在git使用SSH密钥进行github身份认证学习笔记

1.生成ssh密钥对 官网文档:Https://docs.github.com/zh/authentication(本节内容对应的官方文档,不清晰的地方可参考此内容) 首先,启动我们的git bush(在桌面右键,点击 Git Bush Here &#xf…

Qt Creator设置IDE的字体、颜色、主题样式

Qt是一款开源的、跨平台的C开发框架,支持Windows、Linux、Mac系统,从1995发布第一版以来,发展迅猛,最开始是用于Nokia手机的Symbian(塞班)系统和应用程序开发,现在是用于嵌入式软件、桌面软件(比如WPS、VirtualBox)、A…

[Linux] Linux防火墙之firewalld

一、firewalld的简介 firewalld防火墙是Centos7系统默认的防火墙管理工具。 它取代了以前的iptables防火墙。 它也工作在网络层,属于数据包过滤防火墙。 firewalld和iptables是用来管理防火墙的工具,用来定义防火墙的各种规则功能,内部结构…

深入解析Spring Boot中的注解@PathVariable、@RequestParam、@RequestBody的正确使用

文章目录 1. 引言2. PathVariable:处理路径变量2.1 简介2.2 使用示例 3. RequestParam:处理请求参数3.1 简介3.2 使用示例 4. RequestBody:处理请求体4.1 简介4.2 使用示例 5. 多个注解的组合使用6. 参数绑定的原理6.1 HandlerMethodArgument…