shell二位数组——终端字符下降动画
猜想:Shell支持关联数组,可以利用关联数组模拟二维数组。
【验证猜想】
#!/bin/bash array[1,1]=1
array[2,1]=2
array[3,1]=3 for i in `seq 3`
do
printf "array[%d,%d]=%d\n" $i 1 ${array[$i,1]}
done //【运行结果如下】
array[1,1]=3
array[2,1]=3
array[3,1]=3
是否由于逗号引起结果错误?
将array[1,1]替换为array["1,1"](其它类似),结果一样。说明不是因为逗号!
#!/bin/bash array[1,0]=0
array[1,1]=1
array[1,a]=a echo ${array[1,0]},${array[1,1]},${array[1,a]}
export array
export | grep "array" //运行结果如下
a,1,a
export -a array="([0]="a" [1]="1")"
在man手册中查找得到如下结果
-a Each name is an indexed array variable
-A Each name is an associative array variable
即可使用关联数组模拟二维数组
【终端随机字符下降】
shell下通过环境变量$LINES、$COLUMNS获取终端高度、宽度
#!/bin/bash
typeset -A array
row=$LINES //获取终端宽度
col=$COLUMNS //获取终端高度 function init_array () //初始化array数组
{
for i in `seq $row`
do
for j in `seq $col`
do
array[$i,$j]=0
done
done
} function print_line () //打印一条直线
{
for i in `seq $col`
do
printf "-"
done
} function print_array ()
{
print_array //打印上边框
for i in `seq $row`
do
for j in `seq $col`
do
if [ ${array[$i,$j]} -ne 0 ] //若数组元素不为0,则打印对应字符
then
printf ${array[$i,$j]} | awk '{printf("%c",$1)}'
else
printf " "
fi
done
done
print_array //打印下边框
} function rand_character
{
site=$(($(($RANDOM%100))+1)) //产生1-100之间的随机数
t=$(($(($RANDOM%5))+1)) //产生1-5之间的随机数
array[$t,$site]=$(($(($RANDOM%26))+97)) //产生a-z之间的随机字符
} function decline_character
{
for j in `seq $col`
do
for i in `seq 2 $row | sort -n -r` //产生$row->2的递减序列
do
let m=i-1
if [ ${array[$m,$j]} -ne 0 ] //每列由下向上,若上面元素不为0,则下移1个单位
then
array[$i,$j]=${array[$m,$j]}
array[$m,$j]=0 //将字符原位置重置为0
fi
done
done
} init_array
n=0
while(($n<100))
do
clear //清除屏幕
rand_character //产生随机字符
print_array //打印数组
decline_character //下移字符
sleep 0.5 //暂停500毫秒
((n++))
done
shell二位数组——终端字符下降动画的更多相关文章
- C++ 出现bug :二位数组的操作运算,求非对角线的元素的和
编写一个通用程序,求出二位数组(行数和列数必须相等)的非对角线的元素之和,试建立类MATRIX完成上述功能 #include<iostream> using namespace std; ...
- PHP 之二位数组根据某个字段排序封装
/** * @param $array * @param $keys * @param string $sort * @return array */ function arraySort($arra ...
- java中Arrays.sort()对二位数组进行排序
int [][]a = new int [5][2]; //定义一个二维数组,其中所包含的一维数组具有两个元素 对于一个已定义的二位数组a经行如下规则排序,首先按照每一个对应的一维数组第一个元素进行升 ...
- 【shell】构造并遍历二位数组的一种用法
参考shell数组的部分操作用法,实现了构造和遍历二维数组的一种方式,具体如下: #数组元素以空格分割 sites=("www.a.com www.b.com www.c.com www.d ...
- php二位数组合并
转自:http://www.cnblogs.com/losesea/archive/2013/06/14/3134900.html 题目:有以下2个二维数组 1$a=Array(0 => Arr ...
- vector创建二位数组
默认初始化vector vector<vevtor<int> > arr(row, vector<int>(col, 0)); //指定行大小为row,列为col, ...
- Rotate Image(二位数组顺时针旋转)
问题描述: You are given an n x n 2D matrix representing an image. Rotate the image by 90 degrees (clockw ...
- php 按照二位数组中某个指定的字段进行排序
/** * 按照二维数组中某个指定的某个字段进行排序 * @param $array 需要被排序的数组 * @param $flag 排序的标志 1,SORT_DESC 降序 2,SORT_ASC 升 ...
- 剑指offer:二位数组中的查找
准备找实习期间,复习一下数据相关内容,刷刷题. 题目描述: 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样 ...
随机推荐
- Windows常用的一些DOS下的CMD命令整理
Windows常用的一些DOS下的CMD命令整理... -------------- 正斜杠--/////-----向右倒--网址正斜杠反斜杠--\\\\------向左倒--文件路径反斜杠 DOS命 ...
- CAD快捷键命令
符号键(CTRL开头) CTRL+1 PROPCLOSEOROPEN 对象特性管理器 CTRL+2或4 ADCENTER 设计中心 CTRL+3 CTOOLPALETTES 工具选项板 CTRL+8或 ...
- java面向对象理解
面向对象:世间一切事物均可认为是对象,用户不必了解软件内部的实现机制,可根据需要直接调用接口,生成一个正常工作的应用程序. 面向对象的特点:抽象,封装,继承,多态性, 对象:对象就是一个具有明确行为的 ...
- jmeter 实现登录一次,多次操作登录后的某一个功能
- MySql-python的API手记
--------------------python控制mysql的API--------------------#import MySQLdb:引用对应的开发包#conn=MySQLdb.conne ...
- CAS 单点登陆
一.Tomcat配置SSL 1. 生成 server key 以命令方式换到目录%TOMCAT_HOME%,在command命令行输入如下命令: keytool -genkey -alias tomc ...
- 通过新浪ip地址库获取用户省份
<script src="http://apps.bdimg.com/libs/jquery/1.11.3/jquery.min.js"></script> ...
- 201521123096《Java程序设计》第七周学习总结
1. 本周学习总结 2. 书面作业 ArrayList代码分析 1.1 解释ArrayList的contains源代码 contains遍历了ArrayList,如果ArrayList中存在与o相等的 ...
- 201521123081《Java程序设计》 第6周学习总结
1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结. 注1:关键词与内容不求多,但概念之间的联系要清晰,内容覆盖 ...
- 201521123088《Java程序设计》第13周学习总结
1.本周学习总结 2.书面作业 1. 网络基础1.1 比较ping www.baidu.com与ping cec.jmu.edu.cn,分析返回结果有何不同?为什么会有这样的不同? ping cec. ...