1.常见的内部参数
$0:包含路径的命令名
$#:传递给程序的所有参数数目
$?:shell程序返回值,正常退出返回0,反之为非0值
$*:传递给程序的所有参数组成的字符串
$1:传递给shell程序的第1个参数
$2:传递给shell程序的第2个参数,以此类推
2.条件测试表达式
字符串比较:
[ ${x} = ${y} ] 等于
[ ${x} != ${y} ] 不等于
[ -n ${x} ] 非空字符串
[ -z ${x} ] 空字符串
数值比较:
[ ${x} -eq ${y} ] 等于
[ ${x} -ne ${y} ] 不等于
[ ${x} -gt ${y} ] 大于
[ ${x} -lt ${y} ] 小于
[ ${x} -le ${y} ] 小于等于
[ ${x} -ge ${y} ] 大于等于
文档比较:
[ -e filename ] 判断filename文档是否存在
[ -d filename ] 判断filename是否为目录
[ -f /usr/bin/grep ] 判断filename是否为常规文件
[ -L /usr/bin/grep ] 判断filename是否为符号链接
[ -r /var/log/syslog ] 判断filename是否可读
[ -w /var/mytmp.txt ] 判断filename是否可写
[ -L /usr/bin/grep ] 判断filename是否可执行
3.if条件判断
基本格式为:
if 条件测试表达式; then
….
elif 条件测试表达式; then
….
else
….
fi
示例:
if [ “$var1” = “$var2” ];then
echo “equel”
else
echo “not eq”
fi
4.一种特殊的数值比较
除了使用上面的-eq/-lt/-gt等命令进行数值比较以外,我们还可以用另一种特殊的方式进行数值比较:(($x > $y))
(())只能用来做数值类型比较,其他的字符串比较是不可以的。
示例:
#!/bin/bash
echo "please input two number:"
read x y
if ((${x} <= ${y}))
then
echo "x bigger than y"
else
echo "x smaller than y"
fi
5.数值计算 $(())
使用$(())进行数值计算,示例:
#!/bin/bash
echo "please input two number:"
read x y
sum=$(($x + $y))
echo sum of $x and $y is: $sum
6.脚本中调用命令$()
使用$()来调用shell命令,并把返回值赋值给一个变量,示例:
#!/bin/bash
configs=($(ls arch/arm64/configs/*))
echo ${configs[@]}
7.打印一个字符串列表
#!/bin/bash
str=("apple" "orange" "banana" "grape")
echo ${str[@]}
8.提取目录的文件名(去除路径名)
采用命令${var##*/}来提取:去除左边算起最后一个/左边的内容
(如果只有1个#,${var#*/}则表示去除左边算起第一个/左边的内容)
#!/bin/bash
val=/home/ubuntu/work/.repo/manifest.xml
echo ${val##*/}
9.提取目录的路径名(去除文件名)
采用命令${var%/*}来提取:去除右边算起第一个/右边的内容
(如果有2个%%,${var%%/*}则表示去除右边算起最后一个/右边的内容)
#!/bin/bash
val=/home/ubuntu/work/.repo/manifest.xml
echo ${val%/*}
附录:自己写的一个完整的快速内核编译脚本
#!/bin/bash
i=0
configs=($(ls arch/arm64/configs/*))
#echo ${configs[@]}
for file in ${configs[@]}
do
echo ${i}:${file##*/};
((i++));
done
echo please input your choice:
read choice
target=${configs[${choice}]##*/}
echo target is: ${target}
sleep 5
case $choice in
*) echo "good";;
esac
if [ -d `pwd`/out ]
then
rm `pwd`/out;mkdir `pwd`/out
else
mkdir `pwd`/out
fi
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-android- O=`pwd`/out $target
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-android- O=`pwd`/out -j8