Android手機Shell

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


 

 

 

 

 

 

 

發佈了28 篇原創文章 · 獲贊 2 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章