E680系列 Linux手机DIY.Shell应用扩展二.自动生成播放列表( 二 )


74
75
76cat $File_ListHead > $Path_Current/realplayer
77cat $File_Define >> $Path_Current/realplayer
78cat $Path_Current/*.list >> $Path_Current/realplayer
79
80cp -f $Path_Current/realplayer /ezxlocal/download/appwrite/.realplayer.list
四、脚本文件解释
整个脚本主要使用wc,awk,sed等处理文件的Shell命令 。与《随机来铃》一样,
依然使用的是busybox指令集 。下面对脚本执行流程做个详细描述:
1.建立播放列表头<17行>

即tmpListHead.head这个文件内容最终会是播放列表的最开头部分:

[allplaylist]
1 = pl-all
2 = pl-game
counter =2

在遍历所有_*.txt过程中<27-69行>,首先会提取出播放列表名,如_all.txt
的列表名为all 。<31,32行>完成此操作,这里用到了${InstallList#*_}
变量截取方法,适用于bash,别的shell未曾测试 。

<37>行,把获取的播放列表名组合成,E680 Realplayer可识别的内容,
并写入tmpListHead.head 。

<73>行,此时遍历过程已结束,生成最后counter = i 的这句内容 。

2.建立播放列表固定部分<09行>

即config.txt这个预定义文件,文件内容就是:

[bookmark]
counter = 0
[currentplaylist]
counter = 0
currentitem = 0
currentplaylistname =
[history]
counter = 0

这些内容是我们并不关心的,而且也不会去修改它 。

3.动态建立播放列表<27-69行>

主循环中,脚本首先获取一个_*.txt文件,并读取文件内容,计算文件行
数<43行> 。然后遍历文件的每一行(属于内循环<48-60行>) 。对该文件的
每一行目录内容进行播放列表处理<58行> 。内循环结束后,对循环生成的
播放列表文件tmp*.list进行二次处理,使之符合realplayer格式<62行> 。

即每一个_*.txt文件都会对应生成tmp*.list 。


4.最后的文件内容组合<76-80行>
此时的工作相对简单多了,只是融合下所有中间文件,生成最终播放列表,
并强行复制到固定目录 。这里合法的媒体文件扩展名暂时是写死在脚本中
<58行>,有兴趣的可以改成动态配置的 。不管是上篇《Linux手机DIY.Shell
应用扩展一.随机来电铃声》还是这一篇,配置文件都是采用极为简单的
独立文件,这个自然也是可以改进的 。


五、十分重要的补充
截止到目前,Shell系列文章所涉及的所有配置文件都必须是普通的Unix格式,否
则将不能正常运行 。(注:Unix格式与我们平常用的Windows DOS格式差异在于回车符,
Unix是0x0d,DOS是0x0a 0x0d,如果在手机上使用Windows DOS这种格式,记事本查
看到时正常的,不过用Shell命令查看就是乱码 。)
普通Unix这种格式获取起来十分容易,telnet命令行下echo ’a’ > a.txt,
这个a.txt便是完全合法的Unix格式 。而E680手机本身的文件格式皆为U8-Unix,即是
采用UTF-8编码 。
用手机记事本创建一个文本文件,内容为“一二三”,在telnet窗口用cat命令查
看会显示“?123”,这显然出现了编码的不兼容性 。用UltraEdit打开显示是U8-UNIX格
式,不过内容是正常的 。
【E680系列 Linux手机DIY.Shell应用扩展二.自动生成播放列表】“一二三”普通UNIX格式二进制内容:

D2 BB B6 FE C8 FD

“一二三”UTF-8格式二进制内容:

FF FE 00 4E 8C 4E 09 4E

这差异显然比较大,我们通过Shell操作文件时,一旦涉及UTF-8编码的文件,就
会出现错误,要解决这个问题就必须进行编码转换 。这部分内容将在以后做专题讨论 。

推荐阅读