用shell实现队列操作
最近需要在shell中实现一个FIFO的队列,折腾了一会成果大致如下。
首先实现队列的入队操作,假设从标准输入得到数据,如果当前队列为空,则把数据赋给队列,如果队列非空,则把数据加到队列的最右边,数据之间用逗号分隔(假设数据中不含有逗号),代码如下:
#!/bin/bash
list=()
while read line
do
#忽略空白字符的输入
if [ -z "$line" ];then
continue
fi
if [ -z "$list" ];then
list=("$line")
else
list=("${list[@]}","$line")
fi
done
echo "$list"
下面就是出队列的操作,如果$list中没有逗号,那么$list中就只剩一个值了,此时取出$list中所有内容。如果$list中有多个值,则取左边的值并将$list中最左值出列。关于倒数第4,5行的变量取用可以参考 【Shell】变量的取用、删除、取代与替换
while [ -n "$list" ]
do
i=`expr index "$list" ,`
if [ $i -eq 0 ];then
j=$list
list=()
else
j=${list%%,*}
list=${list#*,}
fi
echo $j
done