Shell脚本基础学习
Shell 脚本(shell script),是⼀种为 shell 编写的脚本程序。Shell 编程跟 JavaScript、php 编程⼀样,只要有⼀个能编写代码的⽂本编辑器和⼀个能解释执⾏的脚本解释器就可以了。
Linux 的 Shell 种类众多,常见的有:
1. Bourne Shell(/usr/bin/sh或/bin/sh)
2. Bourne Again Shell(/bin/bash)
bash是⼤多数Linux 系统默认的 Shell,在⼀般情况下,⼈们并不区分 Bourne Shell 和 Bourne Again Shell,所以像 #!/bin/sh同样也可以改为 #!/bin/bash
#! 告诉系统其后路径所指定的程序即是解释此脚本⽂件的 Shell 程序
Shell参数学习
unset
为shell内建指令,可删除变量或函数
shell 中[-eq][-ne][-gt][-lt][ge][le]
-eq //等于
-ne //不等于
-gt //⼤于greater
-lt //⼩于less
-ge //⼤于等于
-le //⼩于等于
Shell 中[$0][$n][$#][$*][$@][$?][$$]
$0 //当前脚本⽂件名
$n //传递给脚本或函数的参数,n为数字,表⽰第⼏个参数,例:$1为第⼀个参数,$2为第⼆个参数
$# //传递给脚本或函数的参数个数
$*$@ //传递给脚本或函数的所有参数
区别:当不被双引号""包含时,都以分开形式输出所有参数,如:$1""$2""$3"
当不被双引号包含时,$*将所有参数作为整体输出,如:"$1$2$3",$@还是以分开形式输出
$? //上个命令的退出状态或函数的返回值
$$ //当前Shell进程ID
if [ -e TEMP_AP_VERSION ]; then
TEMP_AP_VERSION=$(cat TEMP_AP_VERSION)
else
TEMP_AP_VERSION=""
fi
-e filename //如果 filename存在,则为真
-
d filename //如果 filename为⽬录,则为真
-f filename //如果 filename为常规⽂件,则为真
-L filename //如果 filename为符号链接,则为真
-r filename //如果 filename可读,则为真
-w filename //如果 filename可写,则为真
-x filename //如果 filename可执⾏,则为真
-s filename //如果⽂件长度不为0,则为真
-h filename //如果⽂件是软链接,则为真
if[$? -eq 0];then
echo"build success"
else
echo"build fail"
fi
⽤于判断上条命令是否执⾏成功0为成功
[shell]while read line do done<file
[shell]while read line do done<file
read通过输⼊重定向,把file的第⼀⾏所有的内容赋值给变量line,
循环体内的命令⼀般包含对变量line的处理;然后循环处理file的第⼆⾏、第三⾏直到file的最后⼀⾏。
""x =${myversion}x
如果写成["$1"="$2"]在$1,$2为空时会在某些bash版本中出现编译错误,所以运⽤了shell中的字符抵消原则
rm -f !(checksparse.py)
除了checksparse.py都删除
2>&1
表⽰把标准错误输出重定向到标准输出,输出到⼀个⽂件
输出重定向
Command > filename 把标准输出重定向到⼀个新⽂件中
Command >> filename 把标准输出重定向到⼀个⽂件(追加)
输⼊重定向
Command < filename Command 命令以 filename ⽂件作为标准输⼊
Command << delimiter 从标准输⼊中读⼊,以delimiter为结束符。这就是Bash的HereDoc⽤法
unzip
Linux⽤于解压缩zip⽂件命令
www.runoob/linux/linux-comm-unzip.html
-
o //不必先询问⽤户,unzip执⾏后覆盖原有⽂件
-d<⽬录> //指定⽂件解压缩后所要存储的⽬录。
Shell退出状态码
06-09 10:36:02.415 00 I init : processing action (persist.odm.gpio_test=1) from (/vendor/etc/init/hw/:472)
06-09 10:36:02.418 00 I init : starting service'meig_gpio_test'...
06-09 10:36:02.477 00 I init : Service 'meig_gpio_test'(pid 6933) exited with status 127
0 命令成功结束
1 通⽤未知错误
2 误⽤shell命令
126 命令不可执⾏
127 没到命令
128 ⽆效退出参数
128+x Linux 信号x的严重错误
130 Linux 信号2 的严重错误,即命令通过SIGINT(Ctrl+C)终⽌
255 退出状态码越界
⽂件描述符 File Discription
名称代码操作符Java中表⽰Linux 下⽂件描述符(Debian 为例)标准输⼊(stdin)0< 或 <<System.in/dev/stdin -> /proc/self/fd/0 -> /dev/pts/0标准输出(stdout)1>, >>, 1> 或 1>>System.out/dev/stdout -> /proc/self/fd/1 -> /dev/pts/0标准错误输出(stderr)22> 或 2>&/dev/stderr -> /proc/self/fd/2 -> /dev/pts/0 Shell脚本⽰例
#!/bin/bash
echo -e "\n"
unset DEBUGARR
DEBUGARR[1]="user"
DEBUGARR[2]="userdebug"
unset MDBRANCH
unset MDBRANCH
MDBRANCH[1]="trinket"
MDBRANCH[2]="trinket_Gms"
if[$# -lt 2]
then
echo"usage: $0 [${DEBUGARR[1]}|${DEBUGARR[2]}] [${MDBRANCH[1]}|${MDBRANCH[2]}]" echo -e "\n\n"
exit -1
fi
if echo"${DEBUGARR[@]}"|grep -w "${1}"&>/dev/null;then
echo"BUILD_TYPE:${1}"
else
echo"BUILD_TYPE:${1} error"
exit -1
fi
if echo"${MDBRANCH[@]}"|grep -w "${2}"&>/dev/null;then
echo"MDBRANCH:${2}"
else
echo"MDBRANCH:${2} error"
exit -1
fi
echo -e "\n\n"
echo">>>># START TO GET MODEM BIN >>>>"
scp build@192.168.0.181:/home5/build/qcm6125-la-1-0_amss_standard_oem/modem.zip ./
unzip modem.zip -d ./modem
echo">>>># END GET MODEM BIN >>>>"
echo -e "\n\n\n"
echo">>>># START TO UPDATE ANDROID CODE >>>>" # git checkout SLM920_custom
# rm out/ -rf
# git pull
echo">>>># END UPDATE ANDROID CODE >>>>"
echo -e "\n\n\n"
echo">>>># INIT ENVIRONMENT VARIABLES >>>>" echo"V01"> INTERN_VERSION
if["$1"="userdebug"];then
echo"T12"> TEMP_AP_VERSION
else
echo"U12"> TEMP_AP_VERSION
shell代码fi
if["$2"="trinket"];then
echo"SLM920"> PROJECT_NAME
else
echo"SLM920Gms"> PROJECT_NAME
fi
project=$2
echo">>>># END ENVIRONMENT VARIABLES >>>>"
echo -e "\n\n\n"
echo">>>># START TO COMPILE ANDROID CODE >>>>" source build/envsetup.sh
lunch ${project}-$1
make update-api -j16
bash build.sh dist -j16 2>&1|tee1.log
if[!$? -eq 0];then
echo"make error"
exit -1
fi
echo">>>># END TO COMPILE ANDROID CODE >>>>"
echo">>>># END TO COMPILE ANDROID CODE >>>>"
echo -e "\n\n\n"
echo">>>># START TO COMPRESS SOFTWARE IMAGE >>>>" rm tmp -r
mkdir tmp
cp -rf modem/out/* tmp
rm sparseimage/rawprogram*.xml
cp modem/out/rawprogram*.xml sparseimage
./meig_sparseimage.sh ${project}
cp modem/out/rawprogram*.xml tmp
cp sparseimage/super_*.img tmp
cp sparseimage/metadata_*.img tmp
cp sparseimage/userdata_*.img tmp
cp sparseimage/*l tmp
cp out/target/product/${project}/odmconfig_gpiotest.mbn tmp
cp out/target/product/${project}/abl.elf tmp
cp out/target/product/${project}/boot.img tmp
cp out/target/product/${project}/cache.img tmp
cp out/target/product/${project}/emmc_appsboot.mbn tmp
cp out/target/product/${project}/persist.img tmp
cp out/target/product/${project}/ramdisk.img tmp
cp out/target/product/${project}/ramdisk-recovery.img tmp
cp out/target/product/${project}/recovery.img tmp
cp out/target/product/${project}/userdata.img tmp/
cp out/target/product/${project}/userdata_16G.img tmp
cp out/target/product/${project}/userdata_32G.img tmp
cp out/target/product/${project}/persist.img tmp
cp out/target/product/${project}/mdtp.img tmp
cp out/target/product/${project}/obj/KERNEL_OBJ/vmlinux tmp
cp out/target/product/${project}/splash.img tmp
cp out/target/product/${project}/dtbo.img tmp
cp out/target/product/${project}/vbmeta.img tmp
cp out/target/product/${project}/vbmeta_system.img tmp
cp out/target/product/${project}/metadata.img tmp
echo$MEIG_AP_VERSION> tmp/AP_VERSION
function packagefiles()
{
newpath=${1}
rm${newpath} -rf
mkdir${newpath}_symbol
mv tmp/SymbolTable ${newpath}_symbol
mv tmp/vmlinux ${newpath}_symbol
mv tmp ${newpath}
zip -r ${newpath}.zip ${newpath}
zip -r ${newpath}_symbol.zip ${newpath}_symbol
cp out/dist/*-ota.zip ./${newpath}_ota.zip
cp out/dist/merged-qssi_${project}-target_files.zip ./${newpath}_target_files.zip
}
rm
python software_version.py
while read myversion
do
if[!""x =${myversion}x ]
then
echo"Version:"$myversion
packagefiles $myversion
fi
done<
echo">>>># END TO COMPRESS SOFTWARE IMAGE >>>>"
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
推荐文章
热门文章
-
随机森林特征选择原理
2024-10-02 -
自动驾驶系统中的随机森林算法解析
2024-10-02 -
随机森林算法及其在生物信息学中的应用
2024-10-02 -
监督学习中的随机森林算法解析(六)
2024-10-02 -
随机森林算法在数据分析中的应用
2024-10-02 -
机器学习——随机森林,RandomForestClassifier参数含义详解
2024-10-02 -
随机森林 的算法
2024-10-02 -
随机森林算法作用
2024-10-02 -
监督学习中的随机森林算法解析(十)
2024-10-02 -
随机森林算法案例
2024-10-02 -
随机森林案例
2024-10-02 -
二分类问题常用的模型
2024-10-02 -
绘制ssd框架训练流程
2024-10-02 -
一种基于信息熵和DTW的多维时间序列相似性度量算法
2024-10-02 -
SVM训练过程范文
2024-10-02 -
如何使用支持向量机进行股票预测与交易分析
2024-10-02 -
二分类交叉熵损失函数binary
2024-10-02 -
tinybert_训练中文文本分类模型_概述说明
2024-10-02 -
基于门控可形变卷积和分层Transformer的图像修复模型及其应用
2024-10-02 -
人工智能开发技术的测试和评估方法
2024-10-02
最新文章
-
基于随机森林的数据分类算法改进
2024-10-02 -
人工智能中的智能识别与分类技术
2024-10-02 -
基于人工智能技术的随机森林算法在医疗数据挖掘中的应用
2024-10-02 -
随机森林回归模型的建模步骤
2024-10-02 -
r语言随机森林预测模型校准曲线
2024-10-02 -
《2024年随机森林算法优化研究》范文
2024-10-02
发表评论