一、shell脚本编程
Shell脚本是一些命令的集合,可以实现一键处理。是一个文件(批处理文件)
Shell javascript python
shell编程--非编译型语言,必须有命令行解释器。
Shell脚本文件是以xxx.sh结尾的。
第一行 #!/bin/bash //指定命令行解释器(我们的终端是bin下的bash)
# //注释
每一行是一条语句
1.语法
- 变量
变量不用定义,可以直接使用。
num=10 //没有类型,=等号前后不能有空格。
$num //取变量的值
${num} //num后面还有语句的话要加{}。
echo ${num}aaaa //输出
read //输入
“” echo “${num}aaaa” 打出来是10aaaa
‘’ echo ‘${num}aaaa’ 打出来是 ${num}aaaa
- 特殊变量
$0 $1 $2..... //记录命令行的传参
$# //命令行参数的个数(不包括$0)
$*和$@ //命令行所有参数(不包括$0)
$? //上一个命令是否执行成功,成功是0.失败是1
2.运算表达式
算术运算符 +-*/
关系运算符 > < ==
逻辑运算符 && || !
取表达式的值 $[表达式]或者((表达式))
n3=[ ${n1}+${n2} ]或者n3=$((n1+n2))
test 变量1 -eq 变量2 =
(用echo $?查看结果,成功为0,失败为1.用双括号的话则真为1,假为0)
test 变量1 -gt 变量2 > (-g的意思是大于greater)
test 变量1 -lt 变量2 < (test意思可理解为判断)
test 变量1 -ge 变量2 >=
test 变量1 -le 变量2 <=
test 变量1 -a 变量2 &&
test 变量1 -o 变量2 ||
3.数组
数组名=(元素1,元素2)
num=(1 2 3 5)
${num[下标]} //取元素的值
${num[@]} //取数组中元素所有值
${#num[@]} //取数组中元素个数
${num[@]:1:3} //2,3,5取下标1后面的3个值
4.逻辑语句
1)分支语句 if case
if语句语法
格式:
If [表达式1] <空格是必须的,参考kk/0918/class/07if.sh>
then 语句1
elif [表达式2]
then 语句2
else 语句
fi
case语句 格式:
case 变量 in
字符1) //这里加不加引号默认都是输入了一个字符
语句1
;;
字符2)
语句2
;;
*)
语句3
;;
esac
2)循环语句
for 循环
方式一:
for 循环变量 in 循环列表
do
语句
done
for i in 1 2 3 4 5 6 7
do
语句
done
方式二:
for((循环变量;判断条件;自增/减))
do 循环体
done
while循环:
while[表达式]
do
循环体
done
5.函数
函数定义:
function 函数名 ( )
{
函数体
}
使用
函数名 要传的参数
二、Makefile 工程管理工具
Makefile 文件制定了源文件编译规则
在命令行中执行make 则会根据Makefile文件去编译。
Makefile文件编写规则:
目标:是最终生成的目标文件
依赖:目标所依赖的文件
命令:生成目标所要执行的操作
格式:
目标:依赖
<tab>命令
#make
注意:
- 执行make时,会寻找Makefile文件中第一个目标去执行,如果依赖文件存在,直接执行命令;如果依赖文件不存在,继续以依赖文件为目标继续向下找。
- make 后输入目标,直接在Makefile中找对应的目标执行
- 再次make时,若源文件没有改动,则编译器不再编译
- Makefile有一个自动推导功能,如果没有写依赖文件编译规则,但当前目录有源文件,Makefile会自动编译。
1.变量
定义变量
OBJ=main.o add.o sub.o print.o
main:$(OBJ)
gcc
特殊变量
$@ :目标文件
$^ :所有依赖文件
$< :目标后第一个依赖文件