Shell中实现飞行文字效果
大家肯定见过WEB页面上飞行字的效果,但是在Linux系统中,特别是bash命令行模式下,如何实现echo出来的字符串以飞行的特效展现出来呢?
这个特效不见得实用,但偶尔拿来自娱自乐或炫耀一番倒是个不错的方法,呵呵,下面以一段ShellScript代码来给大家讲解如何实现……
#!/bin/bash [-z$1]&&echo"Inputisinvalid!"&&exit1 txt=($(cat$1|sed's/\+/_/g')) lines=${#txt[@]} max_show=10#最多显示行数(超过总行数则设为总行数) [${max_show}-gt${lines}]&&max_show=${lines} hlt_line=3#高亮显示位置(不超过总行1/2,设为3实际是第4行) [${hlt_line}-gt$((lines/2))]&&hlt_line=$((lines/2)) sTTY=$(stty-g)#保存终端设置 clear echo-ne"\033[?25l"#隐藏光标 spaces(){ localijn i=0;n=0 for((j=0;j<=${lines};j++));do [$i-lt${#txt[$j]}]&&((i=${#txt[$j]}))&&((n=$j)) done echo${txt[$n]}|sed's/.//g' } space_line=$(spaces) #传递的参数是欲显示行的序数:show1表示第一行高亮显示 show(){ localijtextcrt_line j=$1 for((i=0;i<max_show;i++));do crt_line=$((j+i-hlt_line)) if[$i-eq${hlt_line}]&&[${crt_line}-ge0]&&[${crt_line}-le${lines}];then text="\033[;32m"${txt[${crt_line}]}"\033[0m" elif[${crt_line}-lt0]||[${crt_line}-gt${lines}];then text=${space_line} else text=${txt[${crt_line}]} fi echo-ne"\033[$((i+3));0H${space_line}" echo-ne"\033[$((i+3));6H${text}" done } #测试 for((j=0;j<lines+hlt_line+1;j++));do show$j sleep1 done
恢复默认设置方法:
echo"" stty${sTTY}#恢复终端设置 echo-e"\033[?25h\033[0;0H"#恢复光标