`

bash shell数组模拟队列queue和shell数组使用技巧

 
阅读更多

 

一 shell数组操作模拟队列queue或者栈stack

http://www.tech-recipes.com/rx/911/queue-and-stack-using-array/

here is a series of operation on array,we can use these functions to implement a queue or stack that can help us more

push:
array=(“${array[@]}” $new_element)

pop:
array=(${array[@]:0:$((${#array[@]}-1))})

 

shift:
array=(${array[@]:1})

unshift
array=($new_element “${array[@]}”)

 

function del_array {
local i
for (( i = 0 ; i < ${#array[@]} ; i++ ))
do
if [ "$1" = "${array[$i]}" ] ;then
break
fi
done
del_array_index $i
}

 

function del_array_index {
array=(${array[@]:0:$1} ${array[@]:$(($1 + 1))})
}

 


二 创建shell数组及使用技巧

转载:http://www.cnblogs.com/chengmo/archive/2010/09/30/1839632.html

在数组方面一些操作进行的总结。

1.数组定义

 

[chengmo@centos5 ~]$ a=(1 2 3 4 5)
[chengmo@centos5 ~]$ echo $a
1

 

一对括号表示是数组,数组元素用“空格”符号分割开。

 

2.数组读取与赋值

  • 得到长度

[chengmo@centos5 ~]$ echo ${#a[@]}
5

用${#数组名[@或*]} 可以得到数组长度

  • 读取

[chengmo@centos5 ~]$ echo ${a[2]}
3

[chengmo@centos5 ~]$ echo ${a[*]}
1 2 3 4 5   

用${数组名[下标]} 下标是从0开始  下标是:*或者@ 得到整个数组内容

  • 赋值:

[chengmo@centos5 ~]$ a[1]=100

[chengmo@centos5 ~]$ echo ${a[*]}
1 100 3 4 5

 

[chengmo@centos5 ~]$ a[5]=100    
[chengmo@centos5 ~]$ echo ${a[*]}

1 100 3 4 5 100

直接通过 数组名[下标] 就可以对其进行引用赋值,如果下标不存在,自动添加新一个数组元素

  • 删除:

[chengmo@centos5 ~]$ a=(1 2 3 4 5)
[chengmo@centos5 ~]$ unset a
[chengmo@centos5 ~]$ echo ${a[*]}

[chengmo@centos5 ~]$ a=(1 2 3 4 5)
[chengmo@centos5 ~]$ unset a[1]  
[chengmo@centos5 ~]$ echo ${a[*]}
1 3 4 5
[chengmo@centos5 ~]$ echo ${#a[*]}
4

直接通过:unset 数组[下标] 可以清除相应的元素,不带下标,清除整个数据。

 

 

3.特殊使用

  • 分片:

[chengmo@centos5 ~]$ a=(1 2 3 4 5)
[chengmo@centos5 ~]$ echo ${a[@]:0:3}
1 2 3
[chengmo@centos5 ~]$ echo ${a[@]:1:4}
2 3 4 5

[chengmo@centos5 ~]$ c=(${a[@]:1:4})
[chengmo@centos5 ~]$ echo ${#c[@]}
4
[chengmo@centos5 ~]$ echo ${c[*]}
2 3 4 5

直接通过 ${数组名[@或*]:起始位置:长度} 切片原先数组,返回是字符串,中间用“空格”分开,因此如果加上”()”,将得到切片数组,上面例子:c 就是一个新数据。

  • 替换:

[chengmo@centos5 ~]$ a=(1 2 3 4 5)   
[chengmo@centos5 ~]$ echo ${a[@]/3/100}
1 2 100 4 5
[chengmo@centos5 ~]$ echo ${a[@]}
1 2 3 4 5
[chengmo@centos5 ~]$ a=(${a[@]/3/100})
[chengmo@centos5 ~]$ echo ${a[@]}    
1 2 100 4 5

调用方法是:${数组名[@或*]/查找字符/替换字符} 该操作不会改变原先数组内容,如果需要修改,可以看上面例子,重新定义数据。

 

从上面讲到的,大家可以发现linux shell 的数组已经很强大了,常见的操作已经绰绰有余了。

分享到:
评论

相关推荐

    shell简单模拟20160112

    标题“shell简单模拟20160112”指的是一个使用shell脚本进行的简单模拟练习,可能是在2016年1月12日完成的。这个模拟可能涉及了Linux shell的基本命令行操作、脚本编写以及历史指令管理。在Linux环境中,shell是一种...

    bash-work-queue:bash 中使用 atd 的简单作业队列。 因为 cron 不是作业队列

    在 bash 中使用atd for Linux 的简单作业队列。 因为 cron 不是作业队列。 bash-work-queue将运行在作业文件中定义的一组脚本: 一行一行 批处理模式 在预先定义的时间间隔 当 cpu 使用率降低预定义的三倍时 安装...

    shell 并行运行脚本

    在Shell中,可以使用数组或者临时文件作为简单的队列机制。当你有大量任务需要按顺序执行,但希望它们能并行处理时,队列就非常有用。例如,你可以将任务添加到队列,然后使用后台进程来消费这些任务: ```bash #!/...

    Shell测试运算和流程控制语句 监控disk、cpu和处理qmail邮件队列

    例如,你可以编写一个Shell脚本定期检查邮件队列的长度,如果队列中有未处理的邮件,可以使用`qmail-inject`重新尝试发送,或者用`qmail-queue`清理过期的邮件。 以下是一个简单的示例脚本概览: ```bash #!/bin/...

    6 shell、多任务与进程 l.zip

    5. **进程通信**:进程间通信(IPC)是多进程系统中的重要概念,包括管道(pipe)、套接字(socket)、信号量(semaphore)、消息队列(message queue)等机制,允许进程间交换数据或同步操作。 6. **守护进程**:...

    Linux上实现shell1输入命令shell2输出结果

    - **消息队列(Message Queue)**:允许进程之间发送和接收结构化的消息。 - **共享内存(Shared Memory)**:两个或多个进程可以直接访问同一块内存区域。 例如,创建一个命名管道并使用它连接两个shell脚本: `...

    Spark-shell批量命令执行脚本的方法

    接着,使用`exec`命令启动`$SPARK_HOME/bin/spark-shell`,并传入一系列参数,例如队列名称、应用程序名称、执行器核心数、内存大小以及配置项等。 在`!EOF`和`!EOF`之间的部分,我们可以写入Spark SQL或DataFrame...

    WebSphere MQ 傻瓜安装指南

    此外,还需要理解和使用队列管理器的上下文对象(MQQueueManager),队列对象(MQQueue)和其他相关的结构体和枚举类型。 四、注意事项: - 安装过程中,务必按照文档的顺序执行每一步,确保所有依赖项已满足。 - ...

    嵌入式软件面试题整理.pdf

    #### __attribute__的使用和结构体字节对齐 `__attribute__((packed))` 用于关闭结构体成员之间的填充,避免不必要的对齐导致的额外内存消耗。 #### 交换分区 交换分区是硬盘上的一块区域,用于存储临时溢出的数据...

    rabbitmq搭建环境.zip

    RabbitMQ是一款开源的消息队列系统,基于AMQP(Advanced Message Queuing Protocol)协议实现,广泛应用于分布式系统中的异步处理、任务队列以及服务之间的通信。本教程将指导你如何在自己的环境中搭建RabbitMQ。 ...

    http_job_queue:允许您对 HTTP 请求进行排队的 API。 结果存储在Redis中供以后检索

    运行npm install安装依赖在 bash、zsh 或其他 shell 中的命令提示符下运行node app.js 服务器运行后,您可以使用以下端点创建和访问作业。端点###使用以下路线创建新工作#### GET /jobs 此端点使用查询参数进行控制...

    UNIX程序设计教学大纲

    5. **进程间通信(IPC)**:掌握管道(pipe)、信号量(semaphore)、共享内存(shared memory)和消息队列(message queue)等IPC机制。 6. **Socket网络编程**:学习TCP/IP协议,编写网络客户端和服务器程序,实现...

    11-Linux操作系统面试题.docx

    Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 Unix 的多用户、多任务、支持多线程和多 CPU 的操作系统。它能运行主要的 Unix 工具软件、应用程序和网络协议。 二、Unix 和 Linux 的区别...

    RabbitMQ+Erlang.rar

    在IT行业中,消息队列(Message Queue)是一种重要的中间件技术,用于在分布式系统中解耦组件间的通信。RabbitMQ作为一款广泛使用的开源消息队列服务器,它基于Erlang编程语言构建,具备高可用性、可靠性和可扩展性...

    erlang+rabbitmq

    2. **队列(Queue)**:队列是消息的存储区域,多个消费者可以共享一个队列,消息按FIFO(先进先出)原则被消费。 3. **绑定(Binding)**:绑定是交换机和队列之间的关系定义,它指定了消息如何从交换机流向队列。 ...

    android添加外部按键

    Android系统通过消息队列(MessageQueue)和Handler来处理事件,包括触摸事件、按键事件等。对于外部按键,我们主要关注的是`KeyEvent`对象,它封装了按键的相关信息,如按键码(key code)、事件类型(ACTION_DOWN,...

    Linux基础学习5

    常见的IPC方式包括管道(pipe)、消息队列(message queue)、共享内存(shared memory)等。 #### Job Control Job Control 是Bash shell提供的一种机制,允许用户在同一终端窗口内同时管理多个进程。这种机制...

Global site tag (gtag.js) - Google Analytics