好久不写文章了,刚刚去FPGA的世界打了一圈酱油,回头发现自己的嵌入式C快要挂掉了,攒点人品学点儿习吧。
为了一个清凉的环境,觉得需要Emerge -auvDN world一下(不良嗜好),看着刷屏休息一下,忽然一样东西吸引了我:
a quickr pickr post
一根旋转的小棍让人有了盼头,起码知道自己的机器没有挂掉哇,早先在Fedora下也见过这个东东。忽然想到,这东西既然是程序写的,就可以用程序重现嘛,为什么不自己写一个玩玩呢?
分析一下这个旋转小棍,其实原理很简单,就是一个字符位在不同字符上来回变化{- / | \ – …..} 问题在于,如何实现同一位上的变化呢?在字符系统中,有如下一些转移字符可以来用(引用:百度百科):
\a 响铃(BEL) 007 \b 退格(BS) 008 \f 换页(FF) 012 \n 换行(LF) 010 \r 回车(CR) 013 \t 水平制表(HT) 009 \v 垂直制表(VT) 011 \\ 反斜杠 092 \? 问号字符 063 \' 单引号字符 039 \" 双引号字符 034 \0 空字符(NULL) 000 \ddd 任意字符 三位八进制 \xhh 任意字符 二位十六进制
其中退格和回车都可以用以实现要求,退格嘛就是删除前面的字符,那么回车呢?正常我们说的“回车”其实是回车+换行,单独的“回车”作用是将光标移动到本行的行首,而其后的输出会将原有的内容删除。
那么如此便简单了,只要一个计数器和case选择就可以实现我们的要求,首先给出Shell脚本~
#rotate_line.sh
#!/bin/sh
function rotate_line #实现旋转线的函数
{
TCOUNT=0 #声明一个计数器
TSLEEP=1 #间隔时间
while true
do
TCOUNT=`expr $TCOUNT + 1` #计数器+1 注意格式 有空格 反单引号
echo -e "Waiting\c "
case $TCOUNT in #用CASE 语句选择状态
"1") echo -e '-'"\r\c " #-e 表示转义,
sleep $TSLEEP;;
"2") echo -e '\\'"\r\c " #\r表示回到行首
sleep $TSLEEP;;
"3") echo -e '|'"\r\c " #\c表示不换行
sleep $TSLEEP;;
"4") echo -e '/'"\r\c "
sleep $TSLEEP
TCOUNT=0;; #回到初始状态
"*") ;;
esac
done
}
rotate_line #使用测试函数
a quickr pickr post
脚本很小,但是基本功能有了,归功于echo的\c转义结合经典的\r \b 使用,上面个的代码中\r 与\b产生的效果应该是一样的,但是实现方式不同,如果延时较长看的就比较明显了。
<待续>
##########################################
* 西格玛向量™->个人博客,欢迎访问:您的满意,我的动力。
##########################################
文章的脚注信息由WordPress的wp-posturl插件自动生成






很简单的小程序