四.Shell 数组

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

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

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

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
# author:菜鸟教程
# url:www.runoob.com

my_array=(A B "C" D)

echo "第一个元素为: ${my_array[0]}"
echo "第二个元素为: ${my_array[1]}"
echo "第三个元素为: ${my_array[2]}"
echo "第四个元素为: ${my_array[3]}"

 

执行脚本,输出结果如下所示:

$ chmod +x test.sh 
$ ./test.sh
第一个元素为: A
第二个元素为: B
第三个元素为: C
第四个元素为: D

获取数组中的所有元素

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

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

my_array[0]=A
my_array[1]=B
my_array[2]=C
my_array[3]=D

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

执行脚本,输出结果如下所示:

$ chmod +x test.sh 
$ ./test.sh
数组的元素为: A B C D
数组的元素为: A B C D

获取数组的长度

获取数组长度的方法与获取字符串长度的方法相同,例如:

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

my_array[0]=A
my_array[1]=B
my_array[2]=C
my_array[3]=D

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

执行脚本,输出结果如下所示:

$ chmod +x test.sh 
$ ./test.sh
数组元素个数为: 4
数组元素个数为: 4

 

 

 

 

 

 

### Shell基础教程 #### 什么是ShellShell 是一种命令行解释器,用于与操作系统内核交互。它不仅是一个命令语言解释器,还是一种强大的脚本编程语言[^1]。通过 Shell,用户可以运行程序、管理文件和目录、控制进程等。 #### Shell版本及用途 常见的 Shell 版本包括: - **Bourne Shell (sh)**:最早的 Unix Shell。 - **Bash (Bourne Again SHell)**:目前最常用的 Shell,兼容 Bourne Shell,并增加了许多特性[^4]。 - **Korn Shell (ksh)**:基于 Bourne Shell,增加了许多高级功能。 - **C Shell (csh)**:语法类似于 C 语言,适合交互式使用。 - **Zsh**:功能强大且高度可配置的 Shell,支持插件和主题。 每种 Shell 都有自己的特点和用途,但 Bash 是目前最广泛使用的 Shell。 #### 变量分类 Shell 中的变量分为以下几类: - **用户自定义变量**:由用户定义,存储在内存中,仅对当前 Shell 会话有效[^3]。 - **环境变量**:全局变量,所有子进程都可以访问,例如 `PATH` 和 `HOME`。 - **特殊变量**:由 Shell 自动设置的变量,例如 `$0`(脚本名称)、`$#`(参数个数)、`$@`(所有参数)[^5]。 #### 自定义变量操作 定义变量的方式有多种: ```bash variable=value # 简单赋值 variable='value' # 所见即所得,不进行转义 variable="value" # 进行转义,支持变量替换 variable=`command` # 将命令输出赋值给变量 ``` 引用变量时需要加 `$` 符号,例如 `echo $variable`。 #### 运算符用法 Shell 支持以下类型的运算符: - **算术运算符**:`+`、`-`、`*`、`/`、`%`,使用 `$((...))` 或 `expr` 实现[^2]。 - **关系运算符**:`-eq`(等于)、`-ne`(不等于)、`-gt`(大于)、`-lt`(小于)等。 - **布尔运算符**:`&&`(与)、`||`(或)、`!`(非)。 - **字符串运算符**:`=`, `!=`, `-z`(空字符串),`-n`(非空字符串)。 示例: ```bash result=$((5 + 3)) # 结果为 8 expr_result=$(expr 5 \* 3) # 结果为 15,注意 * 需要转义 ``` #### 特殊符号含义 一些常见的特殊符号及其含义: - `$`:引用变量。 - `\`:转义字符。 - `*`:通配符,匹配任意长度的字符串。 - `?`:通配符,匹配单个字符。 - `[ ]`:匹配方括号内的任意一个字符。 - `{ }`:大括号扩展,例如 `{1..5}` 表示从 1 到 5 的数字[^5]。 #### 条件测试方法 条件测试使用 `if` 语句实现,语法如下: ```bash if [ condition ]; then command1 elif [ condition ]; then command2 else command3 fi ``` 条件可以是文件测试(如 `-f`, `-d`)、字符串比较或数值比较[^4]。 #### 循环结构与跳出语句 循环结构包括: - **for 循环**: ```bash for var in list; do command done ``` - **while 循环**: ```bash while [ condition ]; do command done ``` - **until 循环**: ```bash until [ condition ]; do command done ``` 跳出语句: - `break`:退出当前循环。 - `continue`:跳过本次循环剩余部分,直接进入下一次循环。 #### 并发控制 并发控制可以通过以下方式实现: - 使用 `&` 将命令放入后台运行。 - 使用 `wait` 等待所有后台任务完成。 - 使用 `xargs -P` 实现多线程处理。 示例: ```bash command1 & command2 & wait ``` #### Shell数组 数组分为索引数组和关联数组: - **定义索引数组**: ```bash array=(value1 value2 value3) ``` - **定义关联数组**(Bash 4.0+ 支持): ```bash declare -A assoc_array assoc_array[key]=value ``` - **遍历数组**: ```bash for element in "${array[@]}"; do echo $element done ``` #### Shell函数 定义函数: ```bash function_name() { command } ``` 调用函数: ```bash function_name ``` 返回值: ```bash return_value=$? ``` #### 正则表达式元字符 常见元字符包括: - `.`:匹配任意单个字符。 - `*`:匹配前面字符零次或多次。 - `+`:匹配前面字符一次或多次。 - `?`:匹配前面字符零次或一次。 - `[]`:匹配方括号内的任意一个字符。 - `^`:匹配行首或取反集合。 - `$`:匹配行尾。 #### sed工作原理与语法 sed 是流编辑器,逐行处理文本。基本语法: ```bash sed 'command' file ``` 常用命令: - `s/pattern/replacement/`:替换模式。 - `d`:删除匹配行。 - `p`:打印匹配行。 #### awk工作流程与使用方法 awk 是一种强大的文本处理工具,按行读取输入并分割字段。基本语法: ```bash awk 'pattern { action }' file ``` 示例: ```bash awk '{ print $1 }' file.txt # 输出第一列 ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值