首页 > 系统相关 >Linux--shell脚本语言—/—<2>

Linux--shell脚本语言—/—<2>

时间:2024-08-04 14:27:12浏览次数:17  
标签:字符 shell 脚本语言 -- 截取 运算符 Shell 数组 字符串

一、shell 基本语法

1、shell字符串

        字符串(String)就是一系列字符的组合。字符串是 Shell 编程中最常用的数据类型之一(除了数字和字符串,也没有其他类型了) 字符串可以由单引号' '包围,也可以由双引号" "包围,也可以不用引号。它们之间是有区别的。

 1)  字符串举例:

2) 三种形式的区别
         由单引号' '包围的字符串:

                任何字符都会原样输出,在其中使用变量是无效的。

                字符串中不能出现单引号,即使对单引号进行转义也不行。

         由双引号" "包围的字符串:

                如果其中包含了某个变量,那么该变量会被解析(得到该变量的值),而不是原样输出。

                字符串中可以出现双引号,只要它被转义了就行。

         不被引号包围的字符串:

                不被引号包围的字符串中出现变量时也会被解析,这一点和双引号" "包围的字符串一样。

                字符串中不能出现空格,否则空格后边的字符串会作为其他变量或者命令解析。

3) 获取字符串长度${# str}

具体方法如下:

string_name 表示字符串名字。

运行结果为:

4) Shell字符串拼接(连接、合并)

        在 Shell 中你不需要使用任何运算符,将两个字符串并排放在一起就能实现拼接,非常简单粗暴。请看下面的例子:

其运行结果为:

5) 字符串的截取

        Shell 截取字符串通常有两种方式:从指定位置开始截取和从指定字符(子字符串)开始截取

1、从指定位置开始截取

        这种方式需要两个参数:除了指定起始位置,还需要截取长度,才能最终确定要截取的字符串。 既然需要指定起始位置,那么就涉及到计数方向的问题,到底是从字符串左边开始计数,还是从字符串右边开始计数。答案是 Shell 同时支持两种计数方式。

1.1 从字符串左边开始计数

其格式如下:

        其中,string 是要截取的字符串,start 是起始位置(从左边开始,从 0 开始计数),length 是要截取的长度(省略的话表示直到字符串的末尾)。

如果将截取长度省略,那么将截取起始位置后面所有的字符串

1.2从右边开始计数

截取格式如下:

同第 1) 种格式相比,第 2) 种格式仅仅多了0-,这是固定的写法,专门用来表示从字符串右边开始计数。

注意:从左边开始计数时,起始数字是 0(这符合程序员思维);从右边开始计数时,起始数字是 1(这符合常人思维)。计数方向不同,起始数字也不同。 不管从哪边开始计数,截取方向都是从左到右。

  

或者带上截取长度:

  

2、从指定字符(子字符串)开始截取

        这种截取方式无法指定字符串长度只能从指定字符(子字符串)截取到字符串末尾。Shell 可以截取指定字符(子字符串)右边的所有字符,也可以截取左边的所有字符。

2.1  使用 # 号截取右边字符

        其中,string 表示要截取的字符,chars 是指定的字符(或者子字符串),*是通配符的一种,表示任意长度的字符串。*chars连起来使用的意思是:忽略左边的所有字符,直到遇见 chars(chars 不会被截取)。        

 

如果不需要忽略 chars 左边的字符,那么也可以不写*

注意,以上写法遇到第一个匹配的字符(子字符串)就结束了

2.2 指定最后一个子字符串

最后一个指定字符(子字符串)再匹配结束,那么可以使用##,具体格式为:

2.3 使用 % 截取左边字符

使用%号可以截取指定字符(或者子字符串)左边的所有字符,具体格式如下:

请注意 * 的位置,因为要截取 chars 左边的字符,而忽略 chars 右边的字符,所以 应该位于 chars 的右侧。其他方面%和#的用法相同。

2.4 字符串操作汇总

2、shell 数组

        数组中可以存放多个值。Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小。 与

        大部分编程语言类似,数组元素的下标由 0 开始。

        Shell 数组用括号来表示,元素用"空格"符号分割开,语法格式如下:

例如:

创建一个简单的数组:

或者

2.1 读取数组

读取数组元素值的一般格式是:

实例:

2.2 关联数组

        Bash 支持关联数组,可以使用任意的字符串、或者整数作为下标来访问数组元素。 关联数组使用 declare 命令来声明,语法格式如下:

-A 选项就是用于声明一个关联数组。 关联数组的键是唯一的。 以下实例我们创建一个关联数组 site,并创建不同的键值:

我们也可以先声明一个关联数组,然后再设置键和值:

2.2.1 访问关联数组元素可以使用指定的键

格式如下:

实例:

其输出结果为:

2.3 获取数组中的所有元素

使用 @ 或 * 可以获取数组中的所有元素,例如:

运行脚本,其结果为:

2.4 获取数组的长度

获取数组长度的方法与获取字符串长度的方法相同,例如:

3、Shell运算符

Shell 和其他编程语言一样,支持多种运算符,包括:

         算数运算符

         关系运算符

         布尔运算符

        • 字符串运算符

        • 文件测试运算符

        原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awkexpr,expr 最常用。 expr 是一款表达式计算工具,使用它能完成表达式的求值操作。

例如,两个数相加(注意使用的是反引号 ` 而不是单引号 '):

3.1 算术运算符

下表列出了常用的算术运算符,假定变量 a 为 10,变量 b 为 20:

注意:

        条件表达式要放在方括号之间,并且要有空格,例如: [$a==$b] 是错误的,必须写成 [ $a == $b ]。

算术运算符实例:

3.2 关系运算符

关系运算符只支持数字,不支持字符串,除非字符串的值是数字。

下表列出了常用的关系运算符,假定变量 a 为 10,变量 b 为 20:

关系运算符实例:

其结果为:

3.3 布尔运算符

下表列出了常用的布尔运算符,假定变量 a 为 10,变量 b 为 20:

布尔运算符实例:

3.4 逻辑运算符

以下介绍 Shell 的逻辑运算符,假定变量 a 为 10,变量 b 为 20:

实例:

3.5 字符串运算符

下表列出了常用的字符串运算符,假定变量 a 为 "abc",变量 b 为 "efg":

3.6 文件测试运算符

文件测试运算符用于检测 Unix 文件的各种属性。 属性检测描述如下:

标签:字符,shell,脚本语言,--,截取,运算符,Shell,数组,字符串
From: https://blog.csdn.net/qq_64603703/article/details/140904965

相关文章

  • Linux--shell脚本语言—/—<1>
    一、shell简介        Shell是一种程序设计语言。作为命令语言,它交互式解释和执行用户输入的命令或者自动地解释和执行预先设定好的一连串的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支        Shel......
  • 1388、STM32单片机心率(脉搏)MAX30102血氧体温检测阈值报警无线蓝牙远程(程序+原理图+
    毕设帮助、开题指导、技术解答(有偿)见文未 目录方案选择单片机的选择显示器选择方案一、设计功能二、实物图三、原理图四、程序源码五、PCB图六、proteus仿真程序流程图:原理图文字讲解:参考论文:资料包括:需要完整的资料可以点击下面的名片加下我,找我要资源压缩......
  • 1386、STM32单片机心率(脉搏)体温检测阈值设置报警无线蓝牙远程设计(程序+原理图+PCB
    毕设帮助、开题指导、技术解答(有偿)见文未 目录方案选择单片机的选择显示器选择方案一、设计功能二、实物图三、原理图四、程序源码五、PCB图六、proteus仿真程序流程图:原理图文字讲解:参考论文:资料包括:需要完整的资料可以点击下面的名片加下我,找我要资源压缩......
  • uniapp Promise封装全局uni.request网络请求
    前言:在一个项目开发时,我们除了页面布局之外,就是数据处理了,封装一个全局的网络请求,有助于我们处理一些公用逻辑代码,更加专注于业务代码官方api说明:https://uniapp.dcloud.net.cn/api/request/request.html一般我们只关注这几个参数url也就是我们的baseurl,根域名header......
  • thinkphp.5.1环境配置搭建一个简易程序
    众所周知php是搭建应用程序简单快捷的语言,今天我们就搭建一下吧工具准备thinkphp框架源码:thinkphp:ThinkPHP是一个开源的,快速、简单的面向对象的轻量级PHP开发框架framework:ThinkPHP核心框架库代码管理工具(可选)sourtree之前我的博客中有详细介绍使用,这里不一一......
  • 代码优化:使用C语言重构单片机汇编启动代码
    目录前言实现思路单片机启动流程汇编语言分析开发环境代码分析总结前言在近期的工作需求中,我需要对实时操作系统(RTOS)的底层代码进行一些必要的调整。为此,我重新深入研究了ARM架构的相关知识点。在这一过程中,我回顾了之前一直让我感到困惑的一个技术问题:在几乎所有的......
  • C自定义类型(结构体,联合体,枚举)详解
            在C语言中,数据类型可以分为内置类型(charshortintlongfloatdouble...)和自定义类型。内置类型是由编程语言本身定义的基本数据类型,而自定义类型是由程序员根据需要创建的数据类型。    自定义类型:  结构体,联合体(共用体),枚举。结构体:用于组......
  • 【Java】包装类型变量的形参传递,方法内修改后,方法外还是原值?
    背景前几天有个朋友写代码时,想把int变量作为形参传入方法中进行修改后,在方法外能够获取到修改后的变量进行下一步操作。类似这样:classTest{publicstaticvoidmain(String[]args){intx=1;add(x);System.out.println(x);}pub......
  • 北京航空航天大学惊现技术商业“宫斗剧”!背后隐藏的惊天黑幕交易遭曝光!
            北京航空航天大学(以下称北航)与源亿(北京)网络科技有限公司(以下称源亿)的派驻的员工恶意串通,指定北京蚂蚁非标科技有限公司(以下称蚂蚁公司)挖走源亿公司在现场派驻的主要技术人员,并违约终止双方约定的一年的项目周期合作,严重损害源亿的合法权益,非法侵占源亿应得利......
  • PYTHON专题-(4)python叫你搞对象
    什么是面向过程编程?面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行。为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数通过切割成小块函数来降低系统的复杂度。什么是面向对象编程?面向对象编程——ObjectOrientedProgramming,简......