一 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脚本进行的简单模拟练习,可能是在2016年1月12日完成的。这个模拟可能涉及了Linux shell的基本命令行操作、脚本编写以及历史指令管理。在Linux环境中,shell是一种...
在 bash 中使用atd for Linux 的简单作业队列。 因为 cron 不是作业队列。 bash-work-queue将运行在作业文件中定义的一组脚本: 一行一行 批处理模式 在预先定义的时间间隔 当 cpu 使用率降低预定义的三倍时 安装...
在Shell中,可以使用数组或者临时文件作为简单的队列机制。当你有大量任务需要按顺序执行,但希望它们能并行处理时,队列就非常有用。例如,你可以将任务添加到队列,然后使用后台进程来消费这些任务: ```bash #!/...
例如,你可以编写一个Shell脚本定期检查邮件队列的长度,如果队列中有未处理的邮件,可以使用`qmail-inject`重新尝试发送,或者用`qmail-queue`清理过期的邮件。 以下是一个简单的示例脚本概览: ```bash #!/bin/...
5. **进程通信**:进程间通信(IPC)是多进程系统中的重要概念,包括管道(pipe)、套接字(socket)、信号量(semaphore)、消息队列(message queue)等机制,允许进程间交换数据或同步操作。 6. **守护进程**:...
- **消息队列(Message Queue)**:允许进程之间发送和接收结构化的消息。 - **共享内存(Shared Memory)**:两个或多个进程可以直接访问同一块内存区域。 例如,创建一个命名管道并使用它连接两个shell脚本: `...
接着,使用`exec`命令启动`$SPARK_HOME/bin/spark-shell`,并传入一系列参数,例如队列名称、应用程序名称、执行器核心数、内存大小以及配置项等。 在`!EOF`和`!EOF`之间的部分,我们可以写入Spark SQL或DataFrame...
此外,还需要理解和使用队列管理器的上下文对象(MQQueueManager),队列对象(MQQueue)和其他相关的结构体和枚举类型。 四、注意事项: - 安装过程中,务必按照文档的顺序执行每一步,确保所有依赖项已满足。 - ...
#### __attribute__的使用和结构体字节对齐 `__attribute__((packed))` 用于关闭结构体成员之间的填充,避免不必要的对齐导致的额外内存消耗。 #### 交换分区 交换分区是硬盘上的一块区域,用于存储临时溢出的数据...
RabbitMQ是一款开源的消息队列系统,基于AMQP(Advanced Message Queuing Protocol)协议实现,广泛应用于分布式系统中的异步处理、任务队列以及服务之间的通信。本教程将指导你如何在自己的环境中搭建RabbitMQ。 ...
运行npm install安装依赖在 bash、zsh 或其他 shell 中的命令提示符下运行node app.js 服务器运行后,您可以使用以下端点创建和访问作业。端点###使用以下路线创建新工作#### GET /jobs 此端点使用查询参数进行控制...
5. **进程间通信(IPC)**:掌握管道(pipe)、信号量(semaphore)、共享内存(shared memory)和消息队列(message queue)等IPC机制。 6. **Socket网络编程**:学习TCP/IP协议,编写网络客户端和服务器程序,实现...
Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 Unix 的多用户、多任务、支持多线程和多 CPU 的操作系统。它能运行主要的 Unix 工具软件、应用程序和网络协议。 二、Unix 和 Linux 的区别...
在IT行业中,消息队列(Message Queue)是一种重要的中间件技术,用于在分布式系统中解耦组件间的通信。RabbitMQ作为一款广泛使用的开源消息队列服务器,它基于Erlang编程语言构建,具备高可用性、可靠性和可扩展性...
2. **队列(Queue)**:队列是消息的存储区域,多个消费者可以共享一个队列,消息按FIFO(先进先出)原则被消费。 3. **绑定(Binding)**:绑定是交换机和队列之间的关系定义,它指定了消息如何从交换机流向队列。 ...
Android系统通过消息队列(MessageQueue)和Handler来处理事件,包括触摸事件、按键事件等。对于外部按键,我们主要关注的是`KeyEvent`对象,它封装了按键的相关信息,如按键码(key code)、事件类型(ACTION_DOWN,...
常见的IPC方式包括管道(pipe)、消息队列(message queue)、共享内存(shared memory)等。 #### Job Control Job Control 是Bash shell提供的一种机制,允许用户在同一终端窗口内同时管理多个进程。这种机制...