shell脚本和编程4|青训营笔记

76 阅读1分钟

一、shell数组

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

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

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

array_name=(value1 value2 ... valuen)

读取数组

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

${array_name[index]}

关联数组

Bash 支持关联数组,可以使用任意的字符串、或者整数作为下标来访问数组元素。

关联数组使用declare命令来声明,语法格式如下:

declare -A array_name

-A 选项就是用于声明一个关联数组。

关联数组的键是唯一的。 访问关联数组元素可以使用指定的键,格式如下:

array_name["index"]

获取数组中的所有元素

使用 @ 或 * 可以获取数组中的所有元素,在数组前加一个感叹号 ! 可以获取数组的所有键。

获取数组的长度

获取数组长度的方法与获取字符串长度的方法相同。

二、Shell 基本运算符

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

  • 算数运算符
  • 关系运算符
  • 布尔运算符
  • 字符串运算符
  • 文件测试运算符

原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。

expr 是一款表达式计算工具,使用它能完成表达式的求值操作。

注意:

  • 表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2,这与我们熟悉的大多数编程语言不一样。
  • 完整的表达式要被   包含,注意这个字符不是常用的单引号,在 Esc 键下边。
  • 条件表达式要放在方括号之间,并且要有空格,例如:  [a==a==b]  是错误的,必须写成  [ a==空格a ==空格 b ]
  • 乘号(*)前边必须加反斜杠()才能实现乘法运算;
  • if...then...fi 是条件语句,后续将会讲解。
  • 在 MAC 中 shell 的 expr 语法是: $((表达式)) ,此处表达式中的 "*" 不需要转义符号 "" 。