bash shell基础特性之三(数组)

bash shell基础特性之三(数组)

一、数组定义

数组指连续的多个独立内存空间,每个内存空间相当于一个变量。 bash shell只支持一维数组,但参数个数没有限制。

数组元素:数组名+索引(从0开始编号)

声明数组:declare -a ARRAR_NAME(其实不用声明,按数组方式直接赋值给变量即可,BASH就知道那是数组)

关联数组:declare -A ARRAY_NAME

数组元素的赋值:一次赋值全部元素、指定索引进行赋值、一次只赋值一个元素

(1) array=(var1 var2 var3 ... varN)

(2) array=([0]=var1 [1]=var2 [2]=var3 ... [n]=varN)

(3) array[0]=var1

arrya[1]=var2

...

二、数组操作

1、引用数组元素:${ARRAY[index]}

2、计算数组元素个数:${#array[@]}  或者  ${#array[*]}

注意:BASH的特殊参数 @ 和 * 都表示“扩展位置参数,从1开始”,但形式稍有差异,但在数组里使用好像是可以通用的。

例子1):编写脚本array01.sh,从“标准输入”读入n次字符串,每次输入的字符串保存在数组array里

例子2):array02.sh,将字符串里的字母逐个放入数组,并输出到“标准输出”

3、显示整个数组或某一数组元素:

# echo ${SEASON[*]}  或者 echo ${SEASON[@]}

# echo ${SEASON[3]}

4、清除指定的单个数组元素或清除整个数组:

# unset SEASON[2]

# unset SEASON

5、字符串操作:

数组元素匹配移除(以元素为单位,针对所有元素)

#:从左向右进行最短匹配

##:从左向右进行最长匹配

%:从右向左进行最短匹配

%%:从右向左进行最长匹配

${#string}:返回$string的长度

如:# netpath="sysconfig/network-scripts/ifcfg-eth"

# echo ${#netpath}

${string#*word}:word可以是任意字符,自左而右,查找sting变量所存储字符中,第一次出现的word,删除字符开头直至第一次word出现处之间的所有字符

如:# netpath="sysconfig/network-scripts/ifcfg-eth"

# echo ${netpath#*/}

${string##*word}:word可以是任意字符,自左而右,查找sting变量所存储字符中,第一次出现的word,删除字符开头直至最后一次word出现处之间的所有字符

如:# netpath="sysconfig/network-scripts/ifcfg-eth"

# echo ${netpath##*/}

${string%word*}:word可以是任意字符,自右而左,查找sting变量所存储字符中,删除字符开头直至第一次word出现处之间的所有字符

如:# netpath="sysconfig/network-scripts/ifcfg-eth"

# echo ${netpath%f*}

${string%%word*}:word可以是任意字符,自右而左,查找sting变量所存储字符中,删除字符开头直至最后一次word出现处之间的所有字符

如:# netpath="sysconfig/network-scripts/ifcfg-eth"

# echo ${netpath%%f*}

数组元素匹配替换

/xx/yy:对每个元素只替换一次

//xx/yy:对每个元素替换多次

//x/:删除匹配内容

如:#array=(abe abc abcee abcd abde)

#echo ${array[@]/e/E} # abcee第二个e没替换

#echo ${array[@]//e/E} # abcee第二个e被替换

# echo ${array[@]//e/} # 最大匹配删除

# echo ${array[@]/e/} # 最小匹配删除

/#xx/yy front-end匹配(从左向右)

/%xx/yy back-end匹配(从右向左)

如:#echo ${array[@]/#a/A} # abc的a没替换

#echo ${array[@]/%a/A} # abc的a没替换

添加元素

如:#array=(abe abc abcee abcd abde)

#array=("${array[@]}" "bbbbb")

#echo ${array[@]}

三、练习

1、写一个脚本array03.sh:定义一个数组,数组元素为/var/log目录下所有以.log结尾的文件的名字;显示每个文件的行数;

2、写一个脚本array04.sh,生成10个随机数,并按从小到大进行排序;

3、写一个脚本,能从所有同学中随机挑选一个同学回答问题;进一步地:可接受一个参数,做为要挑选的同学的个数;

时间: 2024-10-11 22:44:38

bash shell基础特性之三(数组)的相关文章

Bash shell 基础特性 理论+案例详解

1.命令历史:history 环境变量: HISTFILE:命令历史记录的条数 HISTSIZE:~/.bash.history HISTFILESIZE:命令历史文件记录历史的条数 history:默认显示10条历史纪录 history -n:显示后n条历史记录 history -d n:删除第n条历史纪录 history -c:删除所有历史记录 history -a:手动追加当前会话缓冲区中的历史命令至历史文件中 !n:重复执行第n条命令 !!:重复执行上一条命令 !加命令的开头几个字母:重

bash shell基础特性之二

(1) globbing 文本名通配:元字符 *:匹配任意长度的任意字符: ?:匹配任意单个字符: 示例:a*b: aab, ab, a123b; a?b: []: 匹配指定范围内的任意单个字符: 示例:[0-9] [^]:匹配范围外的任意单个字符: 示例:[^a-b] 字符集合: [:lower:]  匹配小写字母. 等同于a-z [:upper:]  匹配大写字母. 等同于A-Z [:alnum:]  匹配字母和数字.等同于A-Za-z0-9 [:digit:]  匹配(十进制)数字. 等同

CentOS系统Shell编程语言基础之Bash的基础特性简介

bash的基础特性之命令历史: 命令历史:shell进程会在其会话中保存此前用户提交执行过的命令~]#history定制history的功能,可通过环境变量实现HISTSIZE:shell进程可保留的命令历史的条数HISTFILE:持久保存命令历史的文件, ".bash_history"HISTFILESIZE:命令历史文件的大小 命令用法: history [-c] [-d offset] [n]or history -anrw [filename]or history -ps ar

运维基础--Linux中bash的基础特性

bash 的基础特性如下: 一.命令的别名--alias 命令 用来定义和显示命令的别名,unalias撤销定义的别名:但是要注意以下几点: 1.alias的效果仅限于当前shell的生命期: 2.如果修改.bashrc配置文件,其中保存的别名不会立即生效,只有在重新加载该文件的内容后,才会生效且永久生效: 3.为了能够保证设置的别名有效,通常两种操作都要做: 二.命令历史 shell进程会其会话中保存此前用户提交执行过的命令,history是shell的内置命令   1.命令语法格式: his

Linux目录结构、bash的基础特性、I/O重定向及管道

Linux目录结构 LSB(Linux StandardsBase)是一套核心标准,它保证了LINUX发行版同LINUX应用程序之间的良好结合规定了一系列标准,其中包括文件系统层级结构标准(FHS Filesystem Hierarchy Standard) Linux系统根目录下有众多子目录,这些目录都参照了FHS协定 / ├── bin ├── boot ├── dev ├── etc ├── home ├── lib ├── lib64 ├── lost+found ├── media ├

shell基础特性1

Bash的基础特性1 1.命令历史  History 1.1环境变量: HISTSIZE:  命令历史记录的条数: HISTFILE:~/.bash_history; HISTFILESIZE : 命令历史文件记录历史的条数 History -d OFFSET -c History # : 显示历史中最近的#条命令: -a: 手动追加当前会话缓冲区的命令历史至历史文件中: 1.2调用历史中的命令: !#:重复执行执行第#条指令: !!:重复执行上一条命令: !string:重复执行string这

Lunix基础入门--bash的基础特性(五)

Bash的基础特性之一(history命令): 命令历史:shell进程会其会话中保存此前用户提交执行过的命令: [[email protected] ~]# history 定制history的功能,可通过环境变量实现: HISTSIZE:shell进程可保留的命令历史条数 [[email protected] ~]# echo $HISTSIZE 1000 HISTFILE:历史命令保存的文件 [[email protected] ~]# echo $HISTFILE /root/.bash

bash的基础特性(1)

bash的基础特性(1) history: 1.命令解释: history命令用于显示指定数目的指令命令,读取历史命令文件中的目录到历史命令缓冲区和将历史命令缓冲区中的目录写入命令文件. 该命令单独使用时,仅显示历史命令,在命令行中,可以使用符号!执行指定序号的历史命令.例如,要执行第2个历史命令,则输入!2. 历史命令是被保存在内存中的,当退出或者登录shell时,会自动保存或读取.在内存中,历史命令仅能够存储1000条历史命令,该数量是由环境变量HISTSIZE进行控制. 命令语法: his

Linux基础知识--Linux的文件系统和bash的基础特性

Linux基础知识--linux的文件系统和bash的基础特性 一.Linux文件系统: Linux文件系统中的文件是数据的集合,文件系统不仅包含着文件中的数据而且还有文件系统的结构,所有Linux 用户和程序看到的文件.目录.软连接及文件保护信息等都存储在其中 linux文件系统遵循FHS(Filesystem Hierarchy Standard,文件系统目录标准),多数Linux版本采用这种文件组织形式.FHS采用了树行组织文件. FHS定义了两层规范,第一层是,/目录下面的各个目录应该要