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

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.mfbz.cn/a/232839.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CGAL的2D符合规定的三角剖分和网格

1、符合规定的三角剖分 1.1、定义 如果三角形的任何面的外接圆在其内部不包含顶点,则该三角形是 Delaunay 三角形。 约束 Delaunay 三角形是一种尽可能接近 Delaunay 的约束三角形。 约束 Delaunay 三角形的任何面的外接圆在其内部不包含从该面可见的数据点。 如果…

【每日一题】【面试经典150 | 动态规划】爬楼梯

Tag 【动态规划】【数组】 题目来源 70. 爬楼梯 题目解读 有过刷题「动态规划」刷题经验的读者都知道,爬楼梯问题是一种最典型也是最简单的动态规划问题了。 题目描述为:你每次可以爬 1 或者 2 个台阶,问爬上 n 阶有多少种方式。 解题思路…

d8week17

Week7 lec17 TVD去asscess model (本质 距离加权平均)text 11.2A New Statistic: The Distance between Two Distributions text-11.11.1 数据拿到手,套路操作 -- 看hist分布2 total variation distance lec18lec19 lec17 TVD去asscess model…

GoLong的学习之路,进阶,微服务之使用,RPC包(包括源码分析)

今天这篇是接上上篇RPC原理之后这篇是讲如何使用go本身自带的标准库RPC。这篇篇幅会比较短。重点在于上一章对的补充。 文章目录 RPC包的概念使用RPC包服务器代码分析如何实现的?总结Server还提供了两个注册服务的方法 客户端代码分析如何实现的?如何异步…

随机分词与tokenizer(BPE->BBPE->Wordpiece->Unigram->sentencepiece->bytepiece)

0 tokenizer综述 根据不同的切分粒度可以把tokenizer分为: 基于词的切分,基于字的切分和基于subword的切分。 基于subword的切分是目前的主流切分方式。subword的切分包括: BPE(/BBPE), WordPiece 和 Unigram三种分词模型。其中WordPiece可以认为是一种特殊的BPE。完…

复旦量化多策略公开课总结

《掘金之心公众号:gnu_isnot_unix》前Citadel现自营交易与量化管理,分享热点,主观,量化交易内容。活在当下,终身学习 - 给在职却对未来始终迷茫的人的公众号。借此想告诉不断努力,对生活充满热情的读者们&a…

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

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

简单实现Spring容器(三) 初始化单例池并完成getBean() createBean()方法

阶段3: (仍需打磨,静态处有小瑕疵) // 1.编写自己的Spring容器,实现扫描包,得到bean的class对象. // 2.扫描将 bean 信息封装到 BeanDefinition对象,并放入到Map.3.初始化单例池并完成getBean() createBean()方法思路: 初始化单例池,也就是如果Bean是单例的就实例化,并放入到…

TSOA-TCN-SelfAttention基于凌日优化时间卷积网络融合多头自注意力机制的多特征回归预测程序,还未发表!

适用平台:Matlab2023版及以上 凌日优化算法(Transit Search Optimization Algorithm,TSOA)是2022年8月提出的一种新颖的元启发式算法,当一颗行星经过其恒星前方时,会导致恒星的亮度微弱地下降,…

SpringData

1.为什么要学习SpringData? 是因为对数据存储的框架太多了,全部都要学习成本比较高,SpringData对这些数据存储层做了一个统一,学习成本大大降低。

Photoshop Circular Text

Ctrl N 新增 现学现卖

八路达林顿晶体管-ULN2803和ULN2804-笔记

八路达林顿晶体管的介绍 ULN2803示例 BULN2803LV 是专为低压系统设计的大电流达林顿管阵列,电路由八个独立的达林顿管组成,每个达林顿管带有续流二极管,可用于驱动继电器、步进电机等感性负载。单个达林顿管在输入电压低至 1.8V 状态下支持电…

CSS新手入门笔记整理:CSS浮动布局

文档流概述 正常文档流 “文档流”指元素在页面中出现的先后顺序。正常文档流,又称为“普通文档流”或“普通流”,也就是W3C标准所说的“normal flow”。正常文档流,将一个页面从上到下分为一行一行,其中块元素独占一行&#xf…

BUUCTF pwn rip WriteUp

文件分析 下载附件,分析文件 可以看到是64位ELF文件,elf可以理解为Linux中的可执行文件,就像Windows中的exe文件 用ida打开文件 查看main函数的伪代码,可以看到有一个15位的字符数组,该数组通过gets函数传值 还有一…

Ultimate VFX

Ultimate VFX 构建套件:

编译原理lab3-cminus_compiler-LLVM简要熟悉

lab3实验报告,我的实验报告图例很少,这次只有两张图,其余的都以复制输出的形式展现出来了,最终提交的代码在最后 [[#你的提交|你的提交]][[#实验设计|实验设计]][[#提交一:手动编写.ll|提交一:手动编写.ll…

Windows11安装使用Oracle21C详细步骤<图文保姆级>新版本

Windows11安装使用Oracle21C详细步骤<图文保姆级>新版本 Database Software Downloads | Oracle 中国 下载完成后解压缩 双击setup.exe 打开安装页面 同意下一步 更改自己的路径点击下一步 输入密码 下一步安装等待即可 等待加载配置时间有点久 完成即可 使用 搜索…

操作系统考研笔记(王道408)

文章目录 前言计算机系统概述OS的基本概念OS的发展历程OS的运行机制OS体系结构OS引导虚拟机 进程和线程进程和线程基础进程进程状态进程控制进程通信线程线程实现 CPU调度调度的层次进程调度细节调度算法评价指标批处理调度算法交互式调度方法 同步与互斥基本概念互斥互斥软件实…

uniapp移动端悬浮按钮(吸附边缘)

Uniapp移动端悬浮按钮可以通过CSS实现吸附边缘的效果。具体实现步骤如下&#xff1a; html&#xff1a; <movable-area class"movable-area"><movable-view class"movable-view" :position"position" :x"x" :y"y"…

仿windows12网盘,私有云盘部署教程,支持多种网盘

仿windows12网盘,私有云盘部署教程&#xff0c;支持多种网盘 资源宝分享&#xff1a;www.httple.net 视频教程&#xff1a;https://www.bilibili.com/video/BV1m64y1G7Bq/ 宝塔部署方式&#xff1a; 1.验证是否安装jdk,没有安装请看安装教程 推荐安装jdk8&#xff08;注意您…
最新文章