preinst:在复制文件前执行的脚本

postinst:在复制文件之后执行的脚本

prerm:在卸载前执行的脚本

postrm:在卸载之后执行的脚本

文件顶头为

!/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

Last modification:April 27, 2021
如果觉得我的文章对你有用,请随意赞赏