一、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不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,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