shell腳本封裝Linux命令合集

#!/bin/bash


# 打印幫助
sfind_help(){
echo "
【【sfind 命令使用方法】】

[特殊功能]
- cscope  
對使用vim + ctags + cscope編輯工程,進行準備工作
- kdb  
查看內核Debug信息
- log  
更新logcat 信息
- adbr
讓設備不斷重啓,用於設備做重啓測試
- adbe
打印adb報錯的信息
- ptosd
adb push 多文件到sd卡
- signapp
給當前目錄下面的apk簽名
- apk
查看apk的標籤/包信息
- installapp
安裝目錄下面的所有apk文件
- help  
查看sfind命令使用幫助
- replace para1 para2 
把當前目錄下文件包含para1字符串替換爲para2字符串
- d para...  
查找當前目錄下要刪除的文件
- t para...  
查找當前目錄下參數指定的日期內更新的文件,參數1指一天前更新的文件,參數10表示10天內更新過的文件
- md5 para...  
查找當前目錄下參數指定文件的md5值

[查找文件]
例如:查找*.c文件中包含連續字符串test1 test2,
root@local:/home# sfind c test1 test2
     前面加z表示全字匹配,查找*.c文件中只含連續字符串test1 
root@local:/home# sfind zc test1 
- c para...  
查找*.c文件文件裏面的字符串,後面跟字符串長度最大爲五個
- zc para...  
使用正則表達式查找*.c文件文件裏面的字符串,後面跟字符串長度最大爲五個
- i para...  
查找*.itm文件文件裏面的字符串,後面跟字符串長度最大爲五個
- zi para...  
使用正則表達式查找*.itm文件文件裏面的字符串,後面跟字符串長度最大爲五個
- sh para...  
查找*.sh文件文件裏面的字符串,後面跟字符串長度最大爲五個
- zsh para...  
使用正則表達式查找*.sh文件文件裏面的字符串,後面跟字符串長度最大爲五個
- j para...  
查找*.java文件文件裏面的字符串,後面跟字符串長度最大爲五個
- zj para...  
使用正則表達式查找*.java文件文件裏面的字符串,後面跟字符串長度最大爲五個
- m para...  
查找*.mk文件文件裏面的字符串,後面跟字符串長度最大爲五個
- zm para...  
使用正則表達式查找*.mk文件文件裏面的字符串,後面跟字符串長度最大爲五個
- x para...  
查找*.xml文件文件裏面的字符串,後面跟字符串長度最大爲五個
- zx para...  
使用正則表達式查找*.xml文件文件裏面的字符串,後面跟字符串長度最大爲五個
- a para...  
查找所有文件裏面的字符串,後面跟字符串長度最大爲五個
- za para...  
使用正則表達式查找所有文件裏面的字符串,後面跟字符串長度最大爲五個
- h para...  
查找*.h文件文件裏面的字符串,後面跟字符串長度最大爲五個
- zh para...  
使用正則表達式查找*.h文件文件裏面的字符串,後面跟字符串長度最大爲五個
- cpp para... 
查找*.cpp文件文件裏面的字符串,後面跟字符串長度最大爲五個
- zcpp para... 
使用正則表達式查找*.cpp文件文件裏面的字符串,後面跟字符串長度最大爲五個


"
}


# 查找文件的MD5值
find_file_md5(){
find  -name $STRING -exec md5sum -b {} ';'
}


# 查找文件更新時間
find_file_modify_time(){
echo
for file in $(find ./ -mtime "-$STRING")
do
if [ -f $file ]; then
echo " $file"
fi
done
echo
}


# 檢查ADB狀態
check_adb_state(){
if [ "unknown" = `adb get-state` ]; then
echo && echo -e "\033[0;34;5m 【【【 devices not found, waiting for insert devices ... 】】】 \033[0m"
echo ""


#if [ "adbd is already running as root" = `adb root`]; then
# echo "adb run as root"
#fi


    while [ "unknown" = `adb get-state` ]
    do
sleep 1
done
fi
}


# 打印內核消息
adb_shell_dmesg(){
check_adb_state
adb shell cat /proc/kmsg
}


# 打印上層消息
adb_shell_logcat(){
check_adb_state
adb shell logcat
}


adb_reboot_devices(){

BOOT_NUM=0


echo && echo -e "\033[0;34;5m Enter Reboot Devices\033[0m"
while [ 1 ]
   do
                while [ "unknown" = `adb get-state` ]
                do
                        sleep 1
                done


echo " 【現在的時間是`date`,等待設備重啓... 】"
sleep 16
adb reboot


BOOTNUM=$(($BOOTNUM+1)) 


if [ "unknown" = `adb get-state` ]; then
echo " 【已重啓$BOOTNUM次, 現在的時間是`date`,等待設備重啓... 】"
fi 
done
}


prepare_for_cscope(){
find ./ -name "*.java" -o -name "*.xml" -o -name "*.c" -o -name "*.h"  > cscope.files;cscope -bkq -i cscope.files;ctags -R
}


# 查找字符串
find_string(){
if [ "true" == $ZHENGZHI ]; then
if [ -e $STRING ]; then
find ./ -name "$FILE_TYPE"
elif [ -e $STRING_TWO ]; then
find ./ -type f -name "$FILE_TYPE" | xargs grep -w -nr --color "$STRING"
elif [ -e $STRING_THREE ]; then
find ./ -type f -name "$FILE_TYPE" | xargs grep -w -nr --color "$STRING $STRING_TWO"
elif [ -e $STRING_FOUR ]; then
find ./ -type f -name "$FILE_TYPE" | xargs grep -w -nr --color "$STRING $STRING_TWO $STRING_THREE"
elif [ -e $STRING_FIVE ]; then
find ./ -type f -name "$FILE_TYPE" | xargs grep -w -nr --color "$STRING $STRING_TWO $STRING_THREE $STRING_FOUR"
else
find ./ -type f -name "$FILE_TYPE" | xargs grep -w -nr --color "$STRING $STRING_TWO $STRING_THREE $STRING_FOUR $STRING_FIVE"
fi
else
if [ -e $STRING ]; then
find ./ -name "$FILE_TYPE"
elif [ -e $STRING_TWO ]; then
find ./ -type f -name "$FILE_TYPE" | xargs grep -nr --color "$STRING"
elif [ -e $STRING_THREE ]; then
find ./ -type f -name "$FILE_TYPE" | xargs grep -nr --color "$STRING $STRING_TWO"
elif [ -e $STRING_FOUR ]; then
find ./ -type f -name "$FILE_TYPE" | xargs grep -nr --color "$STRING $STRING_TWO $STRING_THREE"
elif [ -e $STRING_FIVE ]; then
find ./ -type f -name "$FILE_TYPE" | xargs grep -nr --color "$STRING $STRING_TWO $STRING_THREE $STRING_FOUR"
else
find ./ -type f -name "$FILE_TYPE" | xargs grep -nr --color "$STRING $STRING_TWO $STRING_THREE $STRING_FOUR $STRING_FIVE"
fi
fi
}


# 設置參數
set_args(){
echo ""


# 如果sfind 後面有兩個以上的參數,則執行判斷
if [ ! -e $STRING ]; then
   case "$FILE_TYPE" in
"j")FILE_TYPE="*.java"; echo -e "\033[0;34;5m File Type Is : *.java \033[0m";;
"zj")FILE_TYPE="*.java"; echo -e "\033[0;34;5m File Type Is : *.java \033[0m"; ZHENGZHI="true";;
"c")FILE_TYPE="*.c"; echo -e "\033[0;34;5m File Type Is : *.c \033[0m";;
"zc")FILE_TYPE="*.c"; echo -e "\033[0;34;5m File Type Is : *.c \033[0m"; ZHENGZHI="true";;
"cpp")FILE_TYPE="*.cpp"; echo -e "\033[0;34;5m File Type Is : *.cpp \033[0m";;
"zcpp")FILE_TYPE="*.cpp"; echo -e "\033[0;34;5m File Type Is : *.cpp \033[0m"; ZHENGZHI="true";;
"h")FILE_TYPE="*.h"; echo -e "\033[0;34;5m File Type Is : *.h \033[0m";;
"zh")FILE_TYPE="*.h"; echo -e "\033[0;34;5m File Type Is : *.h \033[0m"; ZHENGZHI="true";;
"x")FILE_TYPE="*.xml"; echo -e "\033[0;34;5m File Type Is : *.xml \033[0m";;
"zx")FILE_TYPE="*.xml"; echo -e "\033[0;34;5m File Type Is : *.xml \033[0m"; ZHENGZHI="true";;
"m")FILE_TYPE="*.mk"; echo -e "\033[0;34;5m File Type Is : *.mk \033[0m";;
"zm")FILE_TYPE="*.mk"; echo -e "\033[0;34;5m File Type Is : *.mk \033[0m"; ZHENGZHI="true";;
"i")FILE_TYPE="*.itm"; echo -e "\033[0;34;5m File Type Is : *.itm \033[0m";;
"zi")FILE_TYPE="*.itm"; echo -e "\033[0;34;5m File Type Is : *.itm \033[0m"; ZHENGZHI="true";;
"sh")FILE_TYPE="*.sh"; echo -e "\033[0;34;5m File Type Is : *.sh \033[0m";;
"zsh")FILE_TYPE="*.sh"; echo -e "\033[0;34;5m File Type Is : *.sh \033[0m"; ZHENGZHI="true";;
"s")FILE_TYPE="*.S"; echo -e "\033[0;34;5m File Type Is : *.S \033[0m";;
"zs")FILE_TYPE="*.S"; echo -e "\033[0;34;5m File Type Is : *.S \033[0m"; ZHENGZHI="true";;
"a")FILE_TYPE="*"; echo -e "\033[0;34;5m File Type Is : * \033[0m";;
"za")FILE_TYPE="*"; echo -e "\033[0;34;5m File Type Is : * \033[0m"; ZHENGZHI="true";;
"d")find ./ -name "$STRING" | xargs rm -fr;      exit 0 ;;
"replace")sed -i "s/$STRING/$STRING_TWO/g" `grep "$STRING" -rl ./`;      exit 0 ;;
   esac
fi


# 判斷sfind後面的參數個數,如果是兩個,則可能是執行一些特殊的功能
if [ ! -e $STRING_FIVE ]; then
echo -e "\033[0;34;5m Find String : $STRING $STRING_TWO $STRING_THREE $STRING_FOUR $FIVE \033[0m"
elif [ ! -e $STRING_FOUR ]; then
echo -e "\033[0;34;5m Find String : $STRING $STRING_TWO $STRING_THREE $STRING_FOUR\033[0m"
elif [ ! -e $STRING_THREE ]; then
echo -e "\033[0;34;5m Find String : $STRING $STRING_TWO $STRING_THREE\033[0m"
elif [ ! -e $STRING_TWO ]; then
echo -e "\033[0;34;5m Find String : $STRING $STRING_TWO\033[0m"
elif [ ! -e $STRING ]; then
echo -e "\033[0;34;5m Find String : $STRING \033[0m"
elif [ ! -e $FILE_TYPE ]; then
case "$FILE_TYPE" in
"convert")for i in *; do convert $i `echo $i | sed -e 's/jpg$/png/'`; done; exit 0 ;;
"bootlogo")rm ../bootanimation.zip; zip -0 -r ../bootanimation.zip ./*; chmod 777 ../bootanimation.zip; adb kill-server; adb remount; adb push ../bootanimation.zip system/media/; adb reboot; exit 0;;
esac
echo -e "\033[44;37;5m              Find File : $FILE_TYPE \033[0m"
else
echo " Input Error!"
fi


echo ""
}




install_application(){
check_adb_state
for file in $(find ./ -name "*.apk")
do
if [ -f $file ]; then
echo " Now Install $file"
adb install $file
fi
done
}




sign_application(){


for file in $(find ./ -name "*.apk")
do
echo " Now sign $file"
java -jar signapk.jar platform.x509.pem platform.pk8 "$file" "$file-sign"
done




}


main_function(){
set_args   
find_string
}


adb_push_file_to_sdcard(){
check_adb_state


for file in $(find ./ -type f -name "*")
do
adb push $file /mnt/sdcard/
done
}


adb_meminfo(){
check_adb_state


while [ 1 ]
do
adb shell cat /proc/meminfo
echo && echo && echo && echo && echo && echo && echo && echo 
sleep 1
done


}


adb_connect(){
while [ 1 ]
do
adb devices
sleep 1
done



sfind_test(){


# 計算
if [ 1 != 1 ]; then
expr 2 "*" 3
fi


# 計算文件行數
if [ 1 != 1 ]; then
wc -l package.sh
wc -w package.sh
wc -c package.sh
fi


#  指定欲顯示的文件內容範圍
if [ 1 != 1 ]; then
cut -b5-10 package.sh
fi


# 文件類型
if [ 1 != 1 ]; then
file package.sh
fi


# 讀取用戶輸入的變量
if [ 1 != 1 ]; then
read KIA_TEST
echo $KIA_TEST
fi


# 獲取不包含路徑的文件名
if [ 1 != 1 ]; then
basename package.sh
fi


# 獲取不包含文件名的文件路徑
if [ 1 != 1 ]; then
dirname package.sh
fi


# 獲取不包含文件名的文件路徑
if [ 1 != 1 ]; then
set
fi


}


chmod_files(){


for file in $(find ./ -name "*")
do
if [ -f $file ]; then
echo $file
chmod 777 $file
fi
done


}


file_type(){


for file in $(find ./ -name "*")
do
if [ -f $file ]; then
echo $file
file $file
fi
done
}
adb_get_language(){


adb shell getprop | grep persist.sys.timezone
adb shell getprop | grep persist.sys.country
adb shell getprop | grep persist.sys.language


}


get_apk_info(){

aapt d badging $STRING | grep package
aapt d badging $STRING | grep launchable-activity
aapt d badging $STRING | grep label
}


get_app_lib(){
        check_adb_state
        for file in $(find ./ -name "*.apk")
        do
                if [ -f $file ]; then
                        echo & echo "  Now Install $file"
                        adb install $file
PACKAGE_CLASS=`aapt d badging $file | grep package | cut -d "'" -f 2`
echo "包名: $PACKAGE_CLASS"
sleep 1
#TESTLOG=`adb shell ls /data/data/$PACKAGE_CLASS/lib`
#if [ ! -e $TESTLOG ]; then
#echo " Found Lib, Now Pulling Lib"
echo " Trying Pull Lib"
adb pull /data/data/$PACKAGE_CLASS/lib/ lib

#fi
                fi
        done
}


FILE_TYPE="$1"
STRING="$2"
STRING_TWO="$3"
STRING_THREE="$4"
STRING_FOUR="$5"
STRING_FIVE="$6"
ZHENGZHI="false"


[ $# = 0 ] && sfind_help && exit 0
[ $# = 1 ] && [ $1 = "help" ] && sfind_help && exit 0
[ $# = 1 ] && [ $1 = "filetype" ] && file_type && exit 0
[ $# = 1 ] && [ $1 = "cscope" ] && prepare_for_cscope && exit 0
[ $# = 1 ] && [ $1 = "kdb" ] && adb_shell_dmesg && exit 0
[ $# = 1 ] && [ $1 = "log" ] && adb_shell_logcat && exit 0
[ $# = 1 ] && [ $1 = "connectadb" ] && adb_connect && exit 0
[ $# = 1 ] && [ $1 = "adbr" ] && adb_reboot_devices && exit 0
[ $# = 1 ] && [ $1 = "adbe" ] && adb logcat *:E && exit 0
[ $# = 1 ] && [ $1 = "installapp" ] && install_application && exit 0
[ $# = 1 ] && [ $1 = "getapplib" ] && get_app_lib && exit 0
[ $# = 1 ] && [ $1 = "signapp" ] && sign_application && exit 0
[ $# = 1 ] && [ $1 = "ptosd" ] && adb_push_file_to_sdcard && exit 0
[ $# = 1 ] && [ $1 = "meminfo" ] && adb_meminfo && exit 0
[ $# = 1 ] && [ $1 = "chmodfile" ] && chmod_files && exit 0
[ $# = 1 ] && [ $1 = "getprop" ] && adb_get_language && exit 0




[ $# = 1 ] && [ $1 = "test" ] && sfind_test && exit 0


[ $# = 1 ] && echo && echo -e "\033[0;34;5m Find File $1 \033[0m" && echo  && find ./ -name "$1" && exit 0


[ $# = 2 ] && [ $1 = "apk" ] && aapt d badging $2 && exit 0
[ $# = 2 ] && [ $1 = "apkinfo" ] && get_apk_info && exit 0
[ $# = 2 ] && [ $1 = "t" ] && find_file_modify_time && exit 0
[ $# = 2 ] && [ $1 = "md5" ] && find_file_md5 && exit 0


# 主函數
main_function

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章