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

一、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 文件的各种属性。 属性检测描述如下:

相关推荐
风静如云35 分钟前
OpenBMC:BmcWeb定义service
linux
sszdzq1 小时前
Docker
运维·docker·容器
book01211 小时前
MySql数据库运维学习笔记
运维·数据库·mysql
leoufung1 小时前
VIM FZF 安裝和使用
linux·编辑器·vim
bugtraq20212 小时前
XiaoMi Mi5(gemini) 刷入Ubuntu Touch 16.04——安卓手机刷入Linux
linux·运维·ubuntu
xmweisi2 小时前
【华为】报文统计的技术NetStream
运维·服务器·网络·华为认证
VVVVWeiYee2 小时前
BGP配置华为——路径优选验证
运维·网络·华为·信息与通信
陆鳐LuLu2 小时前
日志管理利器:基于 ELK 的日志收集、存储与可视化实战
运维·elk·jenkins
CodeWithMe3 小时前
[ Vim ] 常用命令 and 配置
linux·编辑器·vim
DC_BLOG3 小时前
Linux-GlusterFS进阶分布式卷
linux·运维·服务器·分布式