您的位置:首页 > 运维架构 > Shell

Android手机Shell

2015-12-23 09:27 459 查看
linux下的shell是功能非常强大的脚本语言,正像windows上的bat一样,可以简化很多繁重的重复性工作。而Android手机是基于linux系统下的操作系统,幸运的是它继承了linux的shell,因此我们也可以在Android的shell来做很多工作,不过前提是必须得安装busybox,至于命令的话可以在终端模拟器中直接执行,也可以写成以sh为后缀的脚本文件放在手机内存中用re文件管理器打开执行。

在Android中的shell第一行必须是#!/system/bin/sh

#在shell中是注释的意思,编译器不会处理。

svc wifi enable/disable #表示关闭wifi,开启的话是svc wifi
enable/enable。

svc data enable/disable #表示关闭GPRS。

reboot命令是重启,用之前需要用su命令获取root权限。

reboot -p 关机

reboot recovery 重启进入recovery模式。

变量:

shell中的变量是弱类型的,用之前不用声明,但引用的变量值时候要加$,例如计算a+1要这样写:a=$a+1;

read命令:

shell中也可以让用户输入一个数据,在计算。用read来让用户输入数据。如:

read a;echo $a #表示输入一个数给变量a,在输出a的值。

read也可以输入一个数组,例如:

read a

for i in $a

do

echo
$i

done

数学计算:

在shell中可以用let命令来进行数学计算,如:let "a=$a+1"就相当于C语言中的a=a+1.

let "var=$var1+var2"表示两个变量相加。

此外也可以用expr来进行计算,expr $[$var1+$var2]表示两个变量相加,效果与上面相同。

for:

Android中的shell也可以使用for循环语句,如:

for ((i=1;i<10;i++))

do

#代码#

done

表示从一到十

for name in `ls`

表示获取当前文件夹中的所有文件名,把文件名传递给name变量。注意ls表示获取当前文件夹下的文件名列表,ls本身就是一个命令,所以要加`,`是tab键上方的那个键,加了`表示ls的执行结果。

shell中的for语句非常灵活,还有很多种用法,不再列举。

此外,还有while循环,例如计算从一加到十:

while((a<10))

do

let
"a=$a+1"

echo
$a

done

|通道命令:

|为通道,就是把前面命令的执行结果传递给后面的命令,后面的命令在此结果的执行基础上再执行。

例如:ls | grep
music表示查询当前目录下是否有music文件或文件夹,如果有的话显示music,如果没有的话没有显示。

mount -o remount /dev/block/mtdblockX /system

它的意思是把手机上的system文件夹挂载为只读,代码中的mtdblockX中的X是一个数,表示system在哪个块。例如我的手机就是mount
-o remount /dev/block/mtdblock3 /system。你可以用mount | grep
system来查看你的手机system文件夹的挂载情况。而且也能查看system文件夹的挂载位置,即在哪个块。如果后面为ro即是只读,如果为rw即为读写。mount
| grep
system代码的意思就是用mount是查看手机的个文件夹的挂载情况,然后把结果传递给grep命令,grep命令再在结果中查询出含有system关键字的项,然后显示出来。

要想挂载为读写,可以这样写:

mount -o remount,ro /dev/block/mtdblockX /system

字符串处理:

Android的busybox中还有一些强大的字符串处理工具如sed,awk等。如:

var1=`echo $var | sed /s/apk/odex/`

echo $var1
#表示把字符串$var中的apk替换为odex,注意:等号后面和末尾要加`.

var1=`echo $var | awk -F . '{print $1,$2}'`

echo $var1 #作用同上

光看教程是没有用的,还得多做一些实际操作,这样才能对各个命令有跟深的了解。

##################################################################################################

#!/system/bin/sh

#

cd /sdcard/apk

for name in `ls` #获取APK文件名

do

odex=`echo $name | sed
s/.apk/.odex/` #获取odex文件名

dexopt-wrapper $name
/system/app/$odex #制作odex文件

cp /sdcard/apk/$name
/system/app/$name #复制APK文件到系统目录

chmod 644
/system/app/$name #修改APK文件权限

chmod 644
/system/app/$odex #修改odex文件的权限

done

这段代码是批量在手机上生成odex文件。odex是从apk中提取出来的可运行文件,从apk中提取出odex文件可以加快启动速度,减少对RAM的占用,因为没有odex的话,系统也要从apk包中提取dex再运行。

用的时候,现在sdcard上建立一个名为APK的文件夹,把要制作odex的.apk文件放在这个文件夹下。当然也可以修改代码,制作适合自己的。

复制把以上代码(由于windows与linux编码不一样,最好在手机上操作),存为一个后缀为.sh的文件中,把该文件放在手机内存上(不能放卡上)。

打开re文件管理器,然后设置为可读写,找到这个文件,点击运行就可以了。也可以用其他软件打开,如终端模拟器,但必须有高级权限。

此教程只适用于G8手机的2.3.7系统,如果没有dexopt-wrapper 文件的自己去论坛上下。

##################################################################################################

#!/system/bin/sh

a=0

b=0

c=0

d=0

cd /sdcard/DCIM/

for i in `ls`

do

name=`echo $i|awk -F . '{print $2}'`

mv $i $a$b$c$d"."$name

let "d=$d+1"

let "d=$d"

if [ $d = 0 ];then

let "c=$c+1"

let "c=$c"

if [ $c = 0
];then

let
"b=$b+1"

let
"b=$b"

if [ $b = 0
];then

let
"a=$a+1"

let
"a=$a"

fi

fi

fi

done

这段代码是修改某文件夹下的文件名为00000,00001,00002......形式的,便于管理。

用法:把代码复制下来存为sh文件(注意编码格式),然后用re管理器或终端打开即可。可以自己修改代码来决定重命名的文件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: