【Shell脚本】 Shell索引数组变量:定义-获取-拼接-删除、alisa内置命令、默认输出换行语法、 read内置命令、declare内置命令、获取指定key的值

目录

 Shell索引数组变量:定义-获取-拼接-删除

 数组的获取

 数组的拼接

数组的删除

 alisa内置命令

默认输出换行语法

 read内置命令

 declare内置命令

获取指定key的值

使用declare定义一普通数组,并获取打印元素数据的值

 expr命令

 算术运算符

 布尔运算符

 逻辑运算符

 文件测试运算符


 学习目标

 目标

能够使用字符串的3种方式

掌握Shell字符串拼接

掌握shell字符串截取的常用格式

能够定义Shell索引数组和关联数组

能够使用内置命令alias,echo,read,exit,declare操作

掌握Shell的运算符操作

 Shell字符串变量

 介绍

字符串(String)就是一系列字符的组合。字符串是 Shell 编程中最常用的数据类型之一(除了数字和字符串,也没有其他类型了)

 字符串的3种格式

1. 单引号方式

2. 双引号方式, 推荐

3. 不用引号方式

 字符串的3种格式区别

1. 使用单引号 `''`  的字符串:

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

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

   其中包含了变量,那么该变量会被解析得到值,而不是原样输出。

   字符串中还可以出现双引号的子字符串,但是需要转义。

3. 不被引号包围的字符串

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

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

 获取字符串的长度

 语法

```shell

${字符串变量名}

```

 含义

获取字符串的字符长度

 字符串拼接方式

1. 无符号拼接

2. 双引号拼接

3. 混合拼接

   字符串截取语法

| 格式                       | 说明                                                         |

| -------------------------- | ------------------------------------------------------------ |

| `${变量名:start:length}`   | 从 string 字符串的左边第 start 个字符开始,<br>向右截取 length 个字符。 |

| `${变量名:start}`          | 从 string 字符串的左边第 start 个字符开始截取,直到最后。    |

| `${变量名:0-start:length}` | 从 string 字符串的右边第 start 个字符开始,<br>向右截取 length 个字符。 |

| `${变量名:0-start}`        | 从 string 字符串的右边第 start 个字符开始截取,直到最后。    |

| `${变量名*chars}`         | 从 string 字符串第一次出现 *chars 的位置开始,<br>截取 *chars 右边的所有字符。 |

| `${变量名*chars}`        | 从 string 字符串最后一次出现 *chars 的位置开始,<br>截取 *chars 右边的所有字符。 |

| `${变量名%chars*}`         | 从 string 字符串最后第一次出现 chars* 的位置开始,<br>截取 chars* 左边的所有字符。 |

| `${变量名%%chars*}`        | 从 string 字符串第一次出现 chars* 的位置开始,<br>截取 chars* 左边的所有字符 |

 Shell索引数组变量:定义-获取-拼接-删除

 介绍

Shell 支持数组(Array),   数组是若干数据的集合,其中的每一份数据都称为数组的元素。

> 注意Bash Shell 只支持一维数组,不支持多维数组。

 数组的定义

 语法

在 Shell 中,用括号`( )`来表示数组,数组元素之间用空格来分隔. 语法为:

```shell

array_name=(item1  item2 ...)   方式1

array_name=([索引下标1]=item1  [索引下标2]=item2  ...)   方式2

```

> 注意,赋值号 `=` 两边不能有空格

1.定义数字存储100,3,22,58,77,17,20

```shell

nums=(29 100 13 8 91 44)

```

2.Shell 是弱类型的,它并不要求所有数组元素的类型必须相同

```shell

arr=(20 56 "http://www.itcast.cn/")

```

Shell数组元素定义后不是固定的,  定义后还可以赋值

```shell

arr[6]=100

```

3.可以给指定元素赋值初始化

```shell

arr2=([0]=1 [2]=100 [4]=aa)

```

> 由于上面只赋值了3个元素, 所以数组的长度是3

 数组的获取

 语法

1.通过下标获取元素值,index从0开始

```shell

${arr[index]}

```

> 注意使用`{ }`

2.获取值同时复制给其他变量

```shell

item=${arr[index]}

```

3.使用 `@` 或 `*` 可以获取数组中的所有元素

```shell

${arr[@]}

${arr[*]}

```

4.获取数组的长度或个数

```shell

${arr[@]}

${arr[*]}

```

5.获取数组指定元素的字符程度

```shell

${arr[索引]}

```

 数组的拼接

 介绍

所谓 Shell 数组拼接(数组合并),就是将两个数组连接成一个数组

 语法

使用 `@` 和 `*` 获取数组所有元素之后进行拼接

```shell

array_new=(${array1[@]} ${array2[@]} ...)

array_new=(${array1[*]} ${array2[*]} ...)

```

数组的删除

 介绍

删除数组指定元素数据和删除整个数组数据

 语法

删除数组指定元素数据

```shell

unset array_name[index]

```

删除整个数组

```shell

unset array_name

```

 Shell内置命令

 内置命令介绍

Shell 内置命令,就是由 Bash Shell 自身提供的命令,而不是文件系统中的可执行文件。

使用type 来确定一个命令是否是内置命令:

```shell

type 命令

```

通常来说,内置命令会比外部命令执行得更快,执行外部命令时不但会触发磁盘 I/O,还需要 fork 出一个单独的进程来执行,执行完成后再退出。而执行内置命令相当于调用当前 Shell 进程的一个函数, 还是一个进程, 减少了上下文切换。

 内置命令列表

| 命令        | 说明                                                  |

| ----------- | ----------------------------------------------------- |

| :           | 扩展参数列表,执行重定向操作                          |

| .           | 读取并执行指定文件中的命令(在当前 shell 环境中)     |

| ==alias==   | 为指定命令定义一个别名                                |

| bg          | 将作业以后台模式运行                                  |

| bind        | 将键盘序列绑定到一个 readline 函数或宏                |

| break       | 退出 for、while、select 或 until 循环                 |

| builtin     | 执行指定的 shell 内建命令                             |

| caller      | 返回活动子函数调用的上下文                            |

| cd          | 将当前目录切换为指定的目录                            |

| command     | 执行指定的命令,无需进行通常的 shell 查找             |

| compgen     | 为指定单词生成可能的补全匹配                          |

| complete    | 显示指定的单词是如何补全的                            |

| compopt     | 修改指定单词的补全选项                                |

| continue    | 继续执行 for、while、select 或 until 循环的下一次迭代 |

| ==declare== | 声明一个变量或变量类型。                              |

| dirs        | 显示当前存储目录的列表                                |

| disown      | 从进程作业表中刪除指定的作业                          |

| ==echo==    | 将指定字符串输出到 STDOUT                             |

| enable      | 启用或禁用指定的内建shell命令                         |

| eval        | 将指定的参数拼接成一个命令,然后执行该命令            |

| exec        | 用指定命令替换 shell 进程                             |

| ==exit==    | 强制 shell 以指定的退出状态码退出                     |

| export      | 设置子 shell 进程可用的变量                           |

| fc          | 从历史记录中选择命令列表                              |

| fg          | 将作业以前台模式运行                                  |

| getopts     | 分析指定的位置参数                                    |

| hash        | 查找并记住指定命令的全路径名                          |

| help        | 显示帮助文件                                          |

| history     | 显示命令历史记录                                      |

| jobs        | 列出活动作业                                          |

| kill        | 向指定的进程 ID(PID) 发送一个系统信号                 |

| let         | 计算一个数学表达式中的每个参数                        |

| local       | 在函数中创建一个作用域受限的变量                      |

| logout      | 退出登录 shell                                        |

| mapfile     | 从 STDIN 读取数据行,并将其加入索引数组               |

| popd        | 从目录栈中删除记录                                    |

| printf      | 使用格式化字符串显示文本                              |

| pushd       | 向目录栈添加一个目录                                  |

| pwd         | 显示当前工作目录的路径名                              |

| ==read==    | 从 STDIN 读取一行数据并将其赋给一个变量               |

| readarray   | 从 STDIN 读取数据行并将其放入索引数组                 |

| readonly    | 从 STDIN 读取一行数据并将其赋给一个不可修改的变量     |

| return      | 强制函数以某个值退出,这个值可以被调用脚本提取        |

| set         | 设置并显示环境变量的值和 shell 属性                   |

| shift       | 将位置参数依次向下降一个位置                          |

| shopt       | 打开/关闭控制 shell 可选行为的变量值                  |

| source      | 读取并执行指定文件中的命令(在当前 shell 环境中)     |

| suspend     | 暂停 Shell 的执行,直到收到一个 SIGCONT 信号          |

| test        | 基于指定条件返回退出状态码 0 或 1         

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

汉子萌萌哒

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

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

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

打赏作者

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

抵扣说明:

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

余额充值