存档

文章标签 ‘Script’

强悍的vim插件:snipMate

2009年3月30日

google项目lrcdis

2009年3月12日

RT
骨头兄将我以前写的一个下载/显示歌词的脚本整到google code上去了,现在已经有4个成员了呢,嘿嘿。现在明显感觉更新快了,刷刷的就到30几个更新了。。。
项目主页在http://code.google.com/p/lrcdis/
你可以到此处去下载稳定版本:http://code.google.com/p/lrcdis/downloads/list

lrcdis is a bash script for auto download lyrics and display it.

Now compatable with mpd, mocp, audacious, amarok, exaile, quodlibet, rhythmbox, mplayer.

Now supply these display mode:

* CLI: colorful command line method.
* OSD: using gnome-osd-client, give a on-screen-display.
* notify: using notify-send, give a series of message boxs.
* fifo: output a fifo file /dev/shm/lrcfifo, which can be used by other program.

Lrcdis ,

(转载)一个自动安装并配置雅黑(外带几个英文字体)的脚本

2009年3月8日
Comments Off

RT
原文:http://www.cnblogs.com/dyj057/archive/2008/11/12/1332135.html#1470871
在土匪同学的博客上看到的,很有意思:

打开控制器,运行如下的脚本:

wget http://www.cnblogs.com/Files/dyj057/myfonts.sh.zip
unzip -o myfonts.sh.zip
chmod a+x myfonts.sh
./myfonts.sh
支持8.04, 8.10

当然了,其他发行版的linux也是可以用的。
或者你可以直接复制下面的代码(就是myfonts.sh啦),

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#!/bin/bash
myfonts_dir=/usr/share/fonts/truetype/myfonts
screen=0
 
sudo mkdir $myfonts_dir 2>/dev/null
 
echo "字体安装工具"
echo "(C)2008 Deng.Yangjun@Gmail.com"
 
echo "安装控制台字体:Monaco"
wget http://www.cnblogs.com/Files/DengYangjun/monaco-linux.ttf.zip
unzip -o monaco-linux.ttf.zip
sudo mv monaco-linux.ttf $myfonts_dir
rm monaco-linux.ttf.zip
 
echo "安装字体:Lucida Console"
wget http://www.cnblogs.com/Files/DengYangjun/lucida-console.ttf.zip
unzip -o lucida-console.ttf.zip
sudo mv lucida-console.ttf $myfonts_dir
rm lucida-console.ttf.zip
 
echo "安装字体:微软雅黑"
wget http://www.cnblogs.com/Files/DengYangjun/msyh.ttf.zip
unzip -o msyh.ttf.zip
sudo mv msyh.ttf $myfonts_dir
rm msyh.ttf.zip
cd
 
wget http://www.cnblogs.com/Files/DengYangjun/msyhbd.ttf.zip
unzip -o msyhbd.ttf.zip
sudo mv msyhbd.ttf $myfonts_dir
rm msyhbd.ttf.zip
 
#Ubuntu 7.10
#wget http://www.cnblogs.com/Files/DengYangjun/language-selector.conf.zip
#unzip -o language-selector.conf.zip
#sudo mv language-selector.conf /etc/fonts
#rm language-selector.conf.zip
 
#Ubuntu 8.04 
echo "请选择显示器类型(1-2):1-LED	2-CRT"
read screen
case $screen in
1) 
	wget -O local.zip  http://www.cnblogs.com/Files/dyj057/local.led.zip
	;;
2)	
	wget -O local.zip  http://www.cnblogs.com/Files/dyj056/local.zip
	;;
?) 
	echo "无效选择,退出安装"
	exit 1;
esac
 
unzip -o local.zip
sudo mv /etc/fonts/conf.avail/51-local.conf /etc/fonts/conf.avail/51-local.conf.old
sudo mv local.conf /etc/fonts/conf.avail/51-local.conf
rm local.zip
 
cd /etc/fonts/conf.avail
sudo mv 69-language-selector-zh-cn.conf 69-language-selector-zh-cn.conf.old 2>/dev/null
 
cd $myfonts_dir
sudo chmod 555 *
sudo mkfontscale
sudo mkfontdir
sudo fc-cache -v
 
echo "安装字体结束,谢谢使用。请重新登录,查看字体效果。"

Script ,

用awk处理实验数据

2009年2月20日

最近做实验整出一堆的实验数据,手工处理的话就太变态了,而用origin(win,这个我用不上)或qtiplot(linux,kde)又要点来点去点得头晕(可能是不熟悉的缘故)。我只是需要计算些很简单的东西,比如标准偏差(这玩意主要用来画图上的误差棒),于是想到了大名鼎鼎的awk同志,简单几句搞定,嘿嘿,awk可不是盖的:

1
2
3
4
5
6
7
8
9
10
11
#计算一组数据的标准偏差。
BEGIN{print "倒数第一列是标准偏差,倒数第二列是平均值。"}
function sq(x){return x*x}
{
	sum=0
	tmp=0
	for (i=1;i<=NF;i++) sum+=$i
	avr=sum/NF
	for (i=1;i<=NF;i++) tmp+=sq($i-avr)
	print $0,avr,sqrt(tmp/(NF-1))
}

演示一下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
xiooli(~/共享)>> cat haha.txt 
0.6437 0.5912 0.5639          
0.7375 0.6796 0.8372          
0.7750 0.7403 0.8372          
0.8188 0.8177 0.8605          
1      1      1               
0.8500 0.8895 0.8837          
0.8812 0.8453 0.8372          
0.4187 0.4254 0.4593          
0.5407 0.4939
0.6860 0.8163
0.7849 0.8571
0.6047 0.6653
0.9244 1.000  0.9720
0.9012 0.8900 0.9398
1      1      0.9210
0.9942 0.9796 1
xiooli(~/共享)<< awk -f /home/xiooli/.scripts/err.awk haha.txt 
倒数第一列是标准偏差,倒数第二列是平均值。                     
0.6437 0.5912 0.5639 0.5996 0.0405577                          
0.7375 0.6796 0.8372 0.751433 0.0797185                        
0.7750 0.7403 0.8372 0.784167 0.0490961                        
0.8188 0.8177 0.8605 0.832333 0.0243992                        
1      1      1 1 0                                            
0.8500 0.8895 0.8837 0.8744 0.0213291                          
0.8812 0.8453 0.8372 0.854567 0.023418                         
0.4187 0.4254 0.4593 0.434467 0.0217656                        
0.5407 0.4939 0.5173 0.0330926
0.6860 0.8163 0.75115 0.092136
0.7849 0.8571 0.821 0.0510531
0.6047 0.6653 0.635 0.0428507
0.9244 1.000  0.9720 0.965467 0.0382211
0.9012 0.8900 0.9398 0.910333 0.0261261
1      1      0.9210 0.973667 0.0456107
0.9942 0.9796 1 0.991267 0.0105116

呵呵,没有验算,不知道对不对,想来问题不大。处理后直接调用gnuplot去画图就好了,从此生活轻松多了,哈哈^^

Script ,

解析迅雷/快车/qq旋风等流氓下载软件地址的脚本

2009年2月18日

下载网络上的一些资源时候经常会遇到要求你安装乱七八糟的流氓下载软件才能下载的情况。其实这些连接只是很简单的base64加密,用脚本可以轻松搞定,再将其关联到ff的话就可以直接获取原始连接,再调用普通下载软件去下载了,这个脚本就是干这个的^^(还有图形界面阿)。
依赖:base64, zenity, axel, xsel
用法:将脚本保存,并赋予可执行权限。
关联到firefox的方法:about:config里面新建一个Boolean,名字为 network.protocol-handler.external.thunder,值为true ,再新建一个String,名字为 network.protocol-handler.app.thunder,值为本脚本的保存路径。其他快车/qq旋风等同理(尾部换成.flashget和.qqdl)。也可以不关联到ff,从终端调用方法:

1
mutidown 加密后的url

ps:这个只是取得加密的链接,不要指望会真的有迅雷那样的速度。唉,真是流氓有速度,谁也挡不住阿。。
脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#!/bin/bash
#*********************************************
# Name:			mutidown
# Version:		090218
# License:		GPLv3 
# Author:		xiooli <xiooli@yahoo.com.cn>
#*********************************************
 
Save_dir=~/Download  #最后面请不要加“/”,不然保存文件的时候可能找不到路径。
Max_num=20            #在此设定axel的最大连接数
[ ! -d "$Save_dir" ] && mkdir -p "$Save_dir"
 
#下载链接,给出一个下载进度条,并且当点击“取消”的时候将该axel废掉武功。
DOWNLOAD() {
	local axel_info axel_tty axel_pid
	axel -n "$Max_num" "$1" -o "$2/$3" |while read a;do
		echo "$a" |grep "^[\[D]" |sed 's/^\[ *//;s/%.*$//;s/^Download.*$/100/'
	done |zenity --progress --auto-close --text="下载 $True_url 至 $2" --width="350" 2>/dev/null &
	axel_info="`ps ax |grep "axel.*$1" |awk '{print $1"-"$2}'`"
	axel_tty="`echo $axel_info |sed 's/^.*-//'`"
	axel_pid="`echo $axel_info |sed 's/-.*$//'`"
	while :;do 
		if ! [ "`ps ax |grep "$axel_tty.*zenity"`" ];then
			[ "`ps -A |grep "$axel_pid"`" ] && kill -9 "$axel_pid"
			break
		fi
		sleep 1	
	done &
}
 
#出来一个动作选择菜单,选择下一步动作。
UI() {
	local choice file_name save_dir
    choice="$(zenity --list --title "保存文件 -- `basename "$0"`" --text "默认保存目录为:$Save_dir \n解析得URL:$True_url" \
	--column "选项" --column "动作" \
	A 下载至默认目录 B 选择目录并下载 C 保存链接到剪贴板 2>/dev/null)"
	case "$choice" in
	'A')
    file_name="$(zenity --entry --title="重命名文件 -- `basename "$0"`" --text="请输入一个文件名(取消则按链接默认命名)" 2>/dev/null)"
		DOWNLOAD "$True_url" "$Save_dir" "$file_name"
		;;
	'B')
		save_dir="$(zenity --file-selection --directory 2>/dev/null)"
        file_name="$(zenity --entry --title="重命名文件 -- `basename "$0"`" --text="请输入一个文件名(取消则按链接默认命名)" 2>/dev/null)"
		DOWNLOAD "$True_url" "$save_dir" "$file_name"
		;;
	'C')
		printf "$True_url" |xsel -i -b
		;;
	esac
}
 
#从$1获取加密地址,并将其解码出来。
DECODE() {
	local str
	str="$1"
	if [ "`echo "$str" |grep -i "^thunder"`" ];then
		True_url="`echo -n "$str" |sed 's/^[Tt]hunder:\/\///' |base64 -d |sed 's/^AA//;s/ZZ$//'`"
	elif [ "`echo "$str" |grep -i "^flashget"`" ];then
		True_url="`echo -n "$str" |sed 's/^[Ff]lashget:\/\///' |base64 -d |sed 's/\[FLASHGET\]//g'`"
	elif [ "`echo "$str" |grep -i "^qqdl:"`" ];then
		True_url="`echo -n "$str" |sed 's/^qqdl:\/\///' |base64 -d`"
	else
		True_url="$str"
	fi
	[ ! -z "$True_url" ] && UI
}
 
DECODE "$1"

Script , ,

自动生成fvwm菜单的脚本

2009年1月21日

RT
自动创建缩略图需要convert(安装imagemagick包即可)
看看效果图,还不错哦,会自动根据你的图标主题生成小图标(不过category的图标得自己准备就是了):

发件人 xiooli

这个是根据/usr/share/applications里面的desktop文件来创建的。如果你新安装了程序,再运行一下就可以了,不要的项目直接注释掉,下回更新的时候不会覆盖。
代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#!/bin/bash
#Name: 		Fvwm menu auto creator (FMAC)
#Author:	xiooli <xioooli[at]yahoo.com.cn,http://joolix.com>
#Licence:	GPLv3
#Version:	09.01.20
 
Menufile=~/.fvwm/configs/menu_content
Categories=(Network AudioVideo Graphics Office Games Utility Settings System Development Unknow)
Categorieszh=(网络 影音 图像 办公 游戏 附件 设置 系统 开发 未知)
Lang="$(locale|awk -F"." '/LANG=/{gsub("LANG=","",$1);print $1}')"
Fvwmiconspath="`echo ~/.fvwm/icons`"
[ -d "$Fvwmiconspath" ] || mkdir -p "$Fvwmiconspath"
Iconspath=""`echo ~/.icons`" "/usr/share/icons""
#Iconthemedir="Gnome" #在此可以定义使用的图标主题(路径/名称均可,不填就从 ~/.gtkrc-2.0去找) 
Iconthemedir="${Iconthemedir:-$(awk -F"=" '/gtk-icon-theme-name=/{gsub("\"","",$2);print $2}' "`echo ~/.gtkrc-2.0`")}"
[ -d "$Iconthemedir" ] || for i in $Iconspath;do
	[ -d "$i/$Iconthemedir" ] && Iconthemedir="$i/$Iconthemedir" && break
done
 
RESIZE () {
 
	convert -resize 24x24 "$1" "$2"
}
 
ADD_TO_MENU () {
 
	#$1 catnum; $2 iconpath; $3 name; $4 execmd
	local menutip cataicon
	[ -f $Menufile ] ||cat << EOF >$Menufile
#此文件里面是菜单的具体内容,菜单的样式在./menu_style中定义。
DestroyMenu recreate MenuFvwmRoot
AddToMenu MenuFvwmRoot "FVWM 菜单"	Title Top
#MenuCate
EOF
	if [ "`grep -w "Menu${Categories[$1]}" "$Menufile"`" ];then
		menutip="+ \\\"%$2%$3\\\"	Exec exec $4\n#Menu${Categories[$1]}"
		[ "`grep -w "$4" "$Menufile"`" ] || \
		eval "sed -i \"s/^#Menu${Categories[$1]}/${menutip//\//\\/}/\" \"$Menufile\""
	else
		menutip="+ \\\"%$Fvwmiconspath/categrories/${Categories[$1]}.png%${Categorieszh[$1]}\\\"	Popup Menu${Categories[$1]}\n#MenuCate"
		eval "sed -i \"s/^#MenuCate/${menutip//\//\\/}/\" \"$Menufile\""
		echo -e "\nDestroyMenu Menu${Categories[$1]}\nAddToMenu Menu${Categories[$1]}\n#Menu${Categories[$1]}" >> "$Menufile"
		menutip="+ \\\"%$2%$3\\\"	Exec exec $4\n#Menu${Categories[$1]}"
		eval "sed -i \"s/^#Menu${Categories[$1]}/${menutip//\//\\/}/\" \"$Menufile\""
	fi
}
 
GET_INFO () { # $1 gives the desktop file name
 
	local j name type execmd icon iconpath cattmp catnum
	name="`grep -i "^name\[$Lang\]" $1|sed "s/^.*=//"`"
	[ "$name" ] || name="`grep -i "^name=" $1|sed "s/^.*=//"`"
	execmd="`grep -i "^exec=" $1|sed "s/^.*=//;s/%.//g"`"
	cattmp="`grep -i "Categories=" $1|sed "s/^.*=//"`"
	for j in `seq 0 "$((${#Categories[@]}-1))"`;do
		[ "${cattmp//${Categories[$j]}/}" != "$cattmp" ] && catnum="$j" && break
	done
	catnum="${catnum:-$((${#Categories[@]}-1))}"
	icon="`grep -i "^icon=" $1|sed "s/^.*=//"`"
	if [ -f "$icon" ];then
		iconpath="$icon"
		[ ! -f "$Fvwmiconspath/$icon" -a "$iconpath" ] && RESIZE "$iconpath" "$Fvwmiconspath/"`basename "$icon"`""
	else
		[ "${icon/%.png/}" = "$icon" ] && icon="${icon}.png"
		iconpath="`find "$Iconthemedir" -type f -name "$icon" -print|sort|tail -n1`"
		[ "$iconpath" ] || iconpath="`find "$Iconthemedir" -type f -name "*$icon" -print|sort|tail -n1`"
		[ ! -f "$Fvwmiconspath/$icon" -a "$iconpath" ] && RESIZE "$iconpath" "$Fvwmiconspath/$icon"
		iconpath="${iconpath:-"$Fvwmiconspath/noicon.png"}"
	fi
	ADD_TO_MENU "$catnum" "$Fvwmiconspath/`basename "$icon"`" "$name" "$execmd"
}
 
for k in /usr/share/applications/*.desktop;do
	GET_INFO "$k"
done

Script , ,

Scrot截图脚本

2009年1月15日
Comments Off

scort很不错,功能强劲,但是由于其是cli软件,于是被很多人无视了,其实只有简单的几句脚本,然后做成一个启动器放面板上面就会很方便的。

下面是我平常使用的scrot脚本,作了个启动器在panel上面,使用时只需点击一下启动器,然后用鼠标点击窗口就会截图该窗口,点击桌面就全屏截图,画矩形就截矩形部分,截出来的文件保存在自己设置的目录里面,保存的文件名是以scrot-xx.png的形式,xx是数字,当保存目录下有其他的 scrot-xx.png的时候xx会自动加一。

1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/bash
#Name scrot.sh
#Author xiooli <xioooli[at]yahoo.com.cn,http://joolix.com>
#Licence GPL
 
savedir=~/桌面/
prefix="scrot-"
num="`ls "$savedir"|grep "$prefix"|tail -n1|sed "s/"$prefix"//g;s/\..*$//g;s/^0//"`"
num=${num:--1}
((num++))
num="`printf "%.2d" ${num}`"
eval "scrot "${prefix}${num}.png" -bs -e 'mv \$f "$savedir"'"

来个示范截图:

发件人 xiooli
发件人 xiooli

Script , , ,

快捷键撤销刚刚删除到回收站的文件的脚本

2009年1月11日

RT
看见有人怀念win下的ctrl+z撤销操作(主要是撤销删除文件),于是用了几分钟写了这个脚本,虽然不能撤销重命名/移动文件等,但是聊胜于无嘛,同时也进一步证明了shell的灵活与强大。
脚本内容:

xiooli(~/桌面)=☪ cat recover.sh
#!/bin/bash
trashpath=~/.local/share/Trash
infofile="`ls -t "$trashpath/info"|head -n1`"
filename="${infofile/%.trashinfo}"
filepath="`grep "Path=" "$trashpath/info/$infofile"|sed "s/Path=//"|perl -p -e 's/%(..)/pack("c", hex($1))/eg'`"
eval "mv \"$trashpath/files/$filename\" \"$filepath\""
rm "$trashpath/info/$infofile"

,保存其为recover.sh,赋予可执行权限。
绑定快捷键:
在gnome中(未开特效):
应用程序》系统》配置编辑器》找到/app/metacity/keybinding_commands选一个键,比如command_1将其键值修改为上述脚本的路径。
然后找到/app/metacity/global_keybinding选中一个键run_command_1(其最后数字一定要同上面的command_1后面的数字相同),修改其键值为你想要的快捷键(如<Control>z)即可。
在compiz中(开了特效):
打开compiz的控制中心》general options》commands》commands》command line 0 填上刚刚那个脚本的路径,然后》key bindings》run command 0 设置快捷键(ctrl+z)。
搞定上面一系列东东后,如果你将一个文件删除到回收站里面,如果你反悔,想将其还原回来,就不必去回收站恢复了,直接按快捷键ctrl+z即可。呵呵方便很多了吧^^

Script ,

如何创建能供joolix使用的lzm模块

2009年1月6日

本来计划做一个lzm模块制作环境,但是最近很忙(要写论文阿:(),就先把比较原始的制作方法写出来咯。
因为joolix是使用修改过的slax的那套脚本制作出的,所以制作lzm模块和slax制作lzm模块大同小异,在JOOLIX/tools目录里面你可以看到如下一些脚本:

deb2dir dir2lzm lzm2dir tgz2lzm deb2lzm

这些脚本就是今天的主角,分别介绍下它们:
deb2dir: 将deb包(们)转换成目录,你可以到目录里面删除不要的东西或者改写一些配置。
用法:

deb2dir source_filename.deb(s)
#参数支持正则表达式,转换好的目录在/tmp/debs2dir_xxxx

dir2lzm: 将目录转换成lzm模块。
用法:

dir2lzm dir xxx.lzm

lzm2dir: 将lzm模块还原成目录,可用于将不满意的lzm模块重新配置/加工。
用法:

lzm2dir xxx.lzm dir
#注意dir一定要是已经存在的

tgz2lzm:这个主要是将slackware的包文件转换成lzm,joolix里面几乎不会用到。
用法:

tgz2lzm xxx.tgz xxx.lzm

deb2lzm:将deb包转换成lzm模块,只能转换单个的deb包,要想转换几个deb包(常有一个软件依赖很多包的)得先用deb2dir将这些包解出成目录,然后再用dir2lzm脚本将目录转换成lzm模块。
用法:

deb2lzm xxx.deb xxx.lzm

为了使用方便,你可以将deb2dir dir2lzm lzm2dir tgz2lzm deb2lzm及liblinuxlive复制到/usr/bin等地方,然后直接作为命令使用他们。
这样制作lzm模块不太方便,不过暂时就先这么着吧,不好意思了。。

Joolix , , ,

wp博客开张咯^*^

2008年12月26日

张罗了好久的wp博客终于开张了,呵呵,以后就在此开山立派,聊天灌水了。
此系本博的处女文,甚有纪念意义,决定截图留念,也顺便考察下google picasa的外联行不行,霍霍,上图:

发件人 wp-images

再来一张:

发件人 wp-images

测试代码高亮:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#!/bin/bash
#name:   win2k_boot
#author: xiooli { xioooli[at]yahoo.com.cn } 
prg() {
   for ((i=0;i<=50;i++));do
      for ((j=0;j<=$i;j+=1));do
         printf ">"
      done
      for ((k=0;k<=50-$j;k+=1));do
         printf "="
      done
      printf "\r"
      sleep 0.1
   done
   echo ""
}
 
echo "Microsoft Windows 2000 [Version 5.00.2195]
 版权所有 1985-2000 Microsoft Corp.
"
put_one_by_one() {
   for w in `echo $1|sed 's/./& /g'`;do
      echo -n $w
      sleep $2
   done
   echo -e "\n"
}
main() {
   echo -n "c:\>; "
   sleep 1
   put_one_by_one $1 0.2
   sleep 2
   case $1 in
      "x!!不开机就砸了你!!")
         sleep 2
         echo -e "             Loading Windows 2000...\n"
         sleep 1
         prg
         exit
         ;;
      *)
         put_one_by_one "'$1'不是内部命令或外部命令,也不是可运行的程序或批处理文件。" 0.1
         ;;
   esac
}
 
for i in "开机" "快开机" "你xx快开机" "x!!不开机就砸了你!!";do
    main $i
done

Other , ,