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"#恢复光标