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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值