一、问题
1.1 输出一个 10位的随机数
1.2 形象地显示最常用的30个命令的使用频率
1.3 一个《黑客帝国》效果的实现
二、答案
2.1
head -c10 <(echo $RANDOM$RANDOM$RANDOM)
2.2
history|awk '{print $2}'|sort|uniq -c|sort -rn|head -30|awk '!max{max=$1;}{r="";i=100*$1/max;while(i-->0)r=r"#";printf "%50s %5d %s %s",$2,$1,r,"\n";}'
分析:
# 输出常用命令及其统计数
history|awk '{print $2}'|sort|uniq -c|sort -rn|head -30 > a.txt
# awk根据统计数输出统计柱状图
awk '!max{max=$1;}{r="";i=100*$1/max;while(i-->0)r=r"#";printf "%50s %5d %s %s",$2,$1,r,"\n";}' a.txt
!max{max=$1;} 如果未定义max,就将$1赋值给max,因为是从大到小排序的,所以max是最大值
i=100*$1/max; 按最大数分成100份,每个命令所占份数
while(i-->0)r=r"#";printf "%50s %5d %s %s",$2,$1,r,"\n"; 循环输出柱状图
2.3
echo -ne "\e[32m" ; while true ; do echo -ne "\e[$(($RANDOM % 2 + 1))m" ; tr -c "[:print:]" " " < /dev/urandom | dd count=1 bs=50 2> /dev/null ; done
分析:
echo
-e表示激活转义字符
-n表示输入最后不加换行符
"\e[32m"
\e[+数字+m固定写法
# 文字风格
0 重置风格
1 粗体
4 下划线
5 点线
7 反转颜色
8 隐藏
# 文字颜色
30 黑色
31 红色
32 绿色
33 黄色
34 蓝色
35 红紫色
36 蓝绿色
37 白色
# 背景色
40 黑色
41 红色
42 绿色
43 黄色
44 蓝色
45 红紫色
46 蓝绿色
47 白色
tr -c "[:print:]" " " < /dev/urandom
表示把/dev/urandom里不能打印的字符全部替换为空格
-c表示把不属于"[:print:]"字符集的字符替换为" "字符集
如果第二个字符集不写则执行删除不属于第一字符集的内容
接着一个管道符连接到dd count=1 bs=50 2> /dev/null
表示每50个字节往屏幕输出
count=1 表示仅读取的次数
bs=50 设置每次读取或输入的字节数和ibs=50和obs=50效果一样
2> /dev/null 将错误输出到/dev/null