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管理器或終端打開即可。可以自己修改代碼來決定重命名的文件。