preinst:在复制文件前执行的脚本
postinst:在复制文件之后执行的脚本
prerm:在卸载前执行的脚本
postrm:在卸载之后执行的脚本
postinst
以QQ表情一直到微信为例
插件地址:http://apt.cydiakk.com
文件顶头为
#!/bin/bash
表示调用bash这个shell
之后就是运行的命令了
cd /var/mobile/Documents/qq
到此目录下
mv *.png /var/containers/Bundle/Application/*/WeChat.app
移动全部后缀名为png的图片到微信目录
注:*为通配符 前提是保证通配符后面有WeChat.app此文件夹
cd /var/mobile/Documents/qq1
到此目录下
mv *.png /var/mobile/Containers/Data/Application/*/Library/WechatPrivate/StoreEmotion/NewEmojiConfig
移动全部后缀名为png的图片到微信文档目录
rm -rf qq
删除名为qq的文件夹
结束
其它命令
删除文件/文件夹
rm 【参数】 文件名
rmdir 文件夹名
rm 是广义的删除命令,可以用于删除文件和文件夹。
rm常用参数有 -f 和 -r
参数 -f :强制删除,即使文件不存在。当无 -f 参数时,要删除一个不存在的文件就会报错,从而中断脚本的执行,因此在绝大部分情况下 -f 参数都是必要的。
参数 -r :递归。要以rm命令删除文件夹,必须加上 -r 参数。该参数会删除目录下的全部子目录和文件,包括链接到的文件/文件夹。因此 -r 参数要慎用。比如有一个链接是指向根目录的,在 有 -r参数的情况下,删除这个链接会导致整个文件系统全部被删除。
rmdir仅能用于删除空文件夹,也就是说,不能用于删除文件和非空的文件夹。
实例:
删除 /var/mobile/abc文件
rm -f /var/mobile/abc
删除 /var/mobile/trash/下的全部文件/文件夹
rm -rf /var/mobile/trash
实例:
删除空目录 /var/mobile/trash
rmdir /var/mobile/trash
复制文件/文件夹
cp 【参数】 原始文件 目的文件
参数列表:
-l(小写字母L):创建硬链接,相当于一个镜像,而不是实际创建两个文件
cp -l abc def
-f:强行复制,如果目的文件已存在,覆盖之且不提示
cp -f abc def
-p:保留文件的属性、用户、组、时间戳等信息
cp -p abc def
-r和-R:作用都是递归,将文件夹下的全部子文件和子文件夹一起复制
cp -r abc/ def/
-s:创建符号链接而不是创建双份文件
cp -s abc/ def/
-n:如果目的文件已存在,则不覆盖且不提示
cp -n abc def
-a:相当与-dR,保留文件自身的属性等数据,一并复制子文件/文件夹
cp -a abc/ def/
移动文件/文件夹 & 重命名
mv 【参数】 源文件 目的文件
参数:
-f:强行移动,如果目的文件已存在,覆盖之且不提示
其实 mv 命令就是复制之后再删除,但 mv 命令会自动保留文件的属性等数据,移动文件夹时会自动移动子文件/子文件夹,因此都不需要另外的参数。
重命名是由mv命令来实现的,mv 就是将 源文件 移动到 目标文件的位置并以目标文件的文件名保存。
显示语句
echo “语句”
示例:显示语句“测试echo命令。”
echo “test echo command”
判断
基本格式是if [ 判断条件一 ]; then
if [ 判断条件一 ]; then
执行命令
else
执行命令
fi
实例:
如果文件abc存在,则备份为abc.bak,否则将文件def重命名为abc
if [ -f abc]; then
mv -f abc abc.bak
else
mv def abc
fi
其中[ -f abc ]可以由[ -e abc]取代
如果目录abc不存在,则新建一个目录abc
if [ ! -e abc ]; then
mkdir abc
fi
获取固件系统版本号
sw_vers -productVersion
获取设备型号
uname -i
uname -m
-i 参数是显示设备代号,-m参数是显示设备型号(实质效果相同)
比特说iPod Touch 1代,运行uname -i得到的结果是N45AP,而运行uname -m的结果是iPod1,1
Cydia中安装完之后重新启动SpringBoard
declare -a cydia
cydia=($CYDIA)
if [[ ${CYDIA+@} ]]; then
eval “echo ‘finish:restart’ >&${cydia[0]}”
fi
Cydia中安装完之后重新启动设备
declare -a cydia
cydia=($CYDIA)
if [[ ${CYDIA+@} ]]; then
eval “echo ‘finish:reboot’ >&${cydia[0]}”
fi
备份
preinst(安装之前就要把原始文件备份,不能等到安装完已经覆盖以后才备份)
if [ ! -f 原始文件备份 ]; then
echo “原始文件的备份已存在,跳过备份”
else
cp -p 原始文件 原始文件备份
echo “原始文件已备份”
fi
postrm(还原备份)
echo “还原备份”
mv -f 原始文件备份 原始文件
判别具体固件版本
在control里可以通过Depends来设置依赖的固件版本,但有时候需要在某个特定固件版本下进行操作
比如说一个软件,要求固件版本大于或等于8.0,但在固件版本为9.3.3的时候必须删除某一个文件才能运行,那么脚本可以这样写
firmware=$(sw_vers -productVersion)
if [[ $firmware == 8.0 ]]; then
删除文件
fi