最近有考试这篇文章写了个开头就扔在了草稿箱,现在在把它搬出来,在学习代码语言的时候,有一个比较有效的学习过程,就是看别人的代码,读懂,理解透彻,然后模仿别人的代码,再自己写,边写边看,重点是运用。
以前接触过脚本,但是我是个菜鸟,这个是安装madplay和MPlayer的脚本
这里有几处说明:
1、# 表示注释
2、脚本是顺序执行的,没有指针等,相对比较简单,但是强大,重要的是理解命令
3、上面的代码因为排版原因,有些注释被挤压到了下一行
4、有些代码功能相似,我就不一一注释了。
#!/bin/sh
#+--------------------------------------------------------------------------------------------
#|Description: This shell script used to download file source code and cross compile it.
#| Author: fanmaolin <fanmaolin@gmail.com>
#| ChangeLog:
#| 1, Initialize 1.0.0 on 2017
#+--------------------------------------------------------------------------------------------
PRJ_PATH=`pwd` #pwd 命令显示当前路径
if [ -z "$INST_PATH" ] ; then #判断“$INST_PATH”是否为空字符串
INST_PATH=${PRJ_PATH}/install #如果是就给它赋值
fi #结束if语句
if [ ! -d $INST_PATH ] ; then #判断 $INST_PATH 目录是否存在
mkdir -p $INST_PATH #如果不存在就创建一个名为 $INST_PATH 的目录
fi
ARCH=arm920t #赋值语句
if [ -z "$ARCH" -a $# -gt 0 ] ; then #如果 "$ARCH" 为空 -a(相当于逻辑与&&) $#(表示传给脚本的参数个数) -gt(大于) 0
ARCH=$1 #上面的条件都满足就把 #1(命令行的第一个参数) 赋值给ARCH http://blog.csdn.net/xiaofei125145/article/details/40184289
fi
sup_arch=("" "arm926t" "arm920t" ) # 一对括号表示是数组,数组元素用“空格”符号分割开
#该函数用于选择正确的ARCH及交叉编译器
function select_arch()
{
echo "Current support ARCH: " #打印字符串
i=1
len=${#sup_arch[*]} #获取数组长度
while [ $i -lt $len ]; do #执行while语句直到 $i -lt(小于) $len
echo "$i: ${sup_arch[$i]}" #分别打印出 “ , arm926t,arm920t”
let i++; #let命令用于计算
done
echo "Please select: "
index=
read index #读取你从键盘输入的给index的值(1、2、3)
ARCH=${sup_arch[$index]} #把你输入的值赋给ARCH
}
#该函数用于解压缩
function decompress_packet()
(
echo "+---------------------------------------------+"
echo "| Decompress $1 now"
echo "+---------------------------------------------+"
ftype=`file "$1"` #判断压缩包类型,对应不同的解压命令
case "$ftype" in
"$1: Zip archive"*)
unzip "$1" ;; #如果是Zip型就用ubzip命令解压
"$1: gzip compressed"*)
if [ 0 != `expr "$1" : ".*.tar.*" ` ] ; then
tar -xzf $1 #如果存在就用tar -xzf filename 解压
else
gzip -d "$1" #否则(如果是.gz)就用gzip -d flename 解压
fi ;;
"$1: bzip2 compressed"*)
if [ 0 != `expr "$1" : ".*.tar.*" ` ] ; then
tar -xjf $1
else
bunzip2 "$1"
fi ;;
"$1: POSIX tar archive"*)
tar -xf "$1" ;;
*)
echo "$1 is unknow compress format";; #如果没有符合条件的就打印该信息
esac
)
#又复习了一遍解压命令http://www.jb51.net/LINUXjishu/43356.html
#总结
#1、*.tar 用 tar –xvf 解压
#2、*.gz 用 gzip -d或者gunzip 解压
#3、*.tar.gz和*.tgz 用 tar –xzf 解压
#4、*.bz2 用 bzip2 -d或者用bunzip2 解压
#5、*.tar.bz2用tar –xjf 解压
#6、*.Z 用 uncompress 解压
#7、*.tar.Z 用tar –xZf 解压
#8、*.rar 用 unrar e解压
#9、*.zip 用 unzip 解压
if [ -z "$CROSS" ] ; then
if [ -z $ARCH ] ; then
select_arch #如果ARCH、CROSS都为空就调用select_arch函数选择合适的编译器
fi
CROSS="/opt/buildroot-2012.08/${ARCH}/usr/bin/arm-linux-" #交叉编译器地址赋给CROSS
fi
CROSS_PATH=`dirname $CROSS` #dirname命令用来获取文件的绝对路径 脚本中常用这个命令cd "$(dirname "$0")"获取脚本文件所在的绝对路径
export PATH=${CROSS_PATH}:$PATH #export [-fnp][变量名称]=[变量设置值],Linux export命令用于设置或显示环境变量,在这里用来将原来编译器命令改成交叉编译器命令
export CC=${CROSS}gcc
export CXX=${CROSS}g++
export AR=${CROSS}ar #ar是linux下的库管理器
export AS=${CROSS}as #as命令是linux下的汇编器
export LD=${CROSS}ld #ld是linux下的链接器
# 上面几个参考:http://blog.csdn.net/flygo201/article/details/40432895
export NM=${CROSS}nm #nm用于列出程序文件中的符号
export RANLIB=${CROSS}ranlib #早期ranlib用来对静态库的符号索引表进行更新http://www.linuxidc.com/Linux/2011-05/35774.htm
#ranlib相当于ar -s http://blog.csdn.net/langeldep/article/details/8296929 后来就不用ranlib了
export STRIP=${CROSS}strip #程序文件瘦身器 http://blog.csdn.net/altawu/article/details/7270719
LIBMAD_NAME=libmad-0.15.1b
LIBMAD_DL_ADDR=ftp://ftp.mars.org/pub/mpeg/$LIBMAD_NAME.tar.gz #下载地址
if [ ! -d ${INST_PATH}/libmad/i