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

  • 24
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜就多练_0828

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值