免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 13141 | 回复: 25

如何实现飞行字? [复制链接]

论坛徽章:
0
发表于 2009-02-10 08:50 |显示全部楼层
我想在是SH文件里ECHO一行字,但是我想让它滚动,也就是飞行字,谁做过?谢谢先。

论坛徽章:
0
发表于 2009-02-10 13:33 |显示全部楼层
参考一下这个

  1. #!/bin/bash

  2. [ -z $1 ] && echo "无输入文件!" && exit 1
  3. txt=($(cat $1|sed 's/ \+/_/g'))
  4. lines=${#txt[@]}
  5. max_show=10      #最多显示行数(超过总行数则设为总行数)
  6. [ ${max_show} -gt ${lines} ] && max_show=${lines}
  7. hlt_line=3   #高亮显示位置(不超过总行1/2,设为3实际是第4行)
  8. [ ${hlt_line} -gt $(( lines / 2 )) ] && hlt_line=$(( lines / 2 ))
  9. sTTY=$(stty -g)   #保存终端设置

  10. clear
  11. echo -ne "\033[?25l" #隐藏光标

  12. spaces() {
  13.    local i j n
  14.    i=0; n=0
  15.    for (( j=0; j <= ${lines}; j++ ));do
  16.       [ $i -lt ${#txt[$j]} ] && (( i = ${#txt[$j]} )) && (( n = $j ))
  17.    done
  18.    echo ${txt[$n]}|sed 's/./   /g'
  19. }

  20. space_line=$(spaces)

  21. #传递的参数是欲显示行的序数:show 1 表示第一行高亮显示
  22. show() {
  23.    local i j text crt_line
  24.    j=$1
  25.       
  26.       for (( i=0; i < max_show; i++ ));do
  27.          crt_line=$(( j + i - hlt_line ))
  28.          if [ $i -eq ${hlt_line} ] && [ ${crt_line} -ge 0 ] && [ ${crt_line} -le ${lines} ];then
  29.             text="\033[;32m"${txt[${crt_line}]}"\033[0m"
  30.          elif [ ${crt_line} -lt 0 ] || [ ${crt_line} -gt ${lines} ];then
  31.             text=${space_line}
  32.          else
  33.             text=${txt[${crt_line}]}
  34.          fi
  35.          echo -ne "\033[$((i+3));0H${space_line}"
  36.          echo -ne "\033[$((i+3));6H${text}"
  37.       done
  38. }

  39. #测试
  40. for (( j = 0; j < lines + hlt_line +1 ; j++ ));do
  41.    show $j
  42.    sleep 1
  43. done

  44. echo ""
  45. stty ${sTTY} #恢复终端设置
  46. echo -e "\033[?25h\033[0;0H" #恢复光标
复制代码

评分

参与人数 1可用积分 +15 收起 理由
零二年的夏天 + 15 精品文章

查看全部评分

论坛徽章:
0
发表于 2009-02-10 13:51 |显示全部楼层

回复 #2 kns1024wh 的帖子

这个不错,学习了

论坛徽章:
0
发表于 2009-09-30 18:24 |显示全部楼层
这个的确是很不错

论坛徽章:
0
发表于 2009-09-30 18:31 |显示全部楼层
收下了,等下也去试试!

论坛徽章:
0
发表于 2009-10-05 14:33 |显示全部楼层
收下了 谢谢了 呵呵

论坛徽章:
0
发表于 2009-11-18 09:58 |显示全部楼层
果真有这么牛B 先收下 谢谢

论坛徽章:
0
发表于 2009-11-18 18:02 |显示全部楼层
赶明天也试试看

论坛徽章:
0
发表于 2009-11-18 21:47 |显示全部楼层
有意思!!!!

论坛徽章:
0
发表于 2009-11-19 07:05 |显示全部楼层
长见识了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP