9.3 数组与运算符

本章包含 Bash 中的一维数组以及常用的各种运算符。

Shell 数组

bash 支持一维数组(不支持多维数组),并且没有限定数组的大小。

类似于 C 语言,数组元素的下标由 0 开始。 数组用括号来表示,元素用空格分割,语法格式如下:

array_name=(value1 ... valuen)

示例:

#!/bin/bash
# author:菜鸟教程
# url:www.runoob.com

my_array=(A B "C" D)

也可以使用下标单独赋值:

array_name[0]=value0
array_name[1]=value1
array_name[2]=value2

读取数组

读取元素的语法为 ${array_name[index]}

示例:

#!/bin/bash

my_array=(A B "C" D)
echo "第一个元素为: ${my_array[0]}"
echo "第二个元素为: ${my_array[1]}"
echo "第三个元素为: ${my_array[2]}"
echo "第四个元素为: ${my_array[3]}"

输出:

第一个元素为: A
第二个元素为: B
第三个元素为: C
第四个元素为: D

所有元素

使用 @* 可以获取数组中的所有元素:

echo "数组的元素为: ${my_array[*]}"
echo "数组的元素为: ${my_array[@]}"

数组长度

获取数组长度的方式与字符串相同:

echo "数组元素个数为: ${#my_array[*]}"
echo "数组元素个数为: ${#my_array[@]}"

基本运算符

Shell 支持多种运算符,包括算术、关系、布尔、字符串和文件测试等。

原生 bash 不支持简单数学运算,但可以借助 awkexpr

expr 是一款表达式计算工具,要注意表达式和运算符之间必须有空格,且整条表达式要被反引号包围。

示例:

val=`expr 2 + 2`
echo "两数之和为 : $val"

算术运算符

假定变量 a=10,b=20:

运算符 说明 举例
+ 加法 expr $a + $b 结果为 30
- 减法 expr $a - $b 结果为 -10
* 乘法 expr $a \* $b 结果为 200
/ 除法 expr $b / $a 结果为 2
% 取余 expr $b % $a 结果为 0
= 赋值 a=$b 将把变量 b 的值赋给 a
== 相等 [ $a == $b ] 返回 false
!= 不等 [ $a != $b ] 返回 true

注意:条件表达式要放在方括号之间,并且要有空格。

关系运算符

这些运算符只支持数字,用于在条件表达式中比较两个值:

运算符 说明 举例
-eq 等于 [ $a -eq $b ] 返回 false
-ne 不等 [ $a -ne $b ] 返回 true
-gt 大于 [ $a -gt $b ] 返回 false
-lt 小于 [ $a -lt $b ] 返回 true
-ge 大于等于 [ $a -ge $b ] 返回 false
-le 小于等于 [ $a -le $b ] 返回 true

示例:

a=5
b=8
if [ $a -lt $b ]; then
    echo "$a 小于 $b"
fi

布尔运算符

假定 a=10, b=20:

运算符 说明 举例
! [ ! false ] 返回 true
-o [ $a -lt 20 -o $b -gt 100 ] 返回 true
-a [ $a -lt 20 -a $b -gt 100 ] 返回 false

这些运算符可以组合多个测试条件:

if [ $a -gt 0 -a $b -lt 100 ]; then
    echo "a 大于 0 且 b 小于 100"
fi

以上运算符常与 if 语句或 test 命令一起使用。

算术扩展(推荐)

除了 expr 外,bash 还支持更现代的算术扩展,语法为 $((expression)),不需要反引号且支持 C 风格运算:

x=7
y=$((x * 3 + 2))
echo $y   # 输出 23

这样写更简洁、易读,也是脚本中常见的做法。

results matching ""

    No results matching ""