一、shell基础
1.shell介绍
- shell是操作系统的终端命令行
- 意义:快速的编译多个.c文件
- shell是一类编程语言
- 常用shell语言:sh、bash、csh、ksh、perl、python
- shell脚本的运行机制:解释运行
2.shell运行方法
- 第一种:./xx.sh,和运行二进制可执行程序方法一样。这样运行shell要求shell程序必须具有可执行权限。chmod a+x xx.sh来添加可执行权限。
- 第二种:source xx.sh,source是linux的一个命令,这个命令就是用来执行脚本程序的。这样运行不需要脚本具有可执行权限。
- 第三种:bash xx.sh,bash是一个脚本程序解释器,本质是一个可执行程序。这样执行相当于我们执行了bash程序,然后把xx.sh作为argv[1]传给他运行。
1 #!bin/sh
2 echo "hello world"
- #! /bin/sh 这行话以#!开始,后面加上一个pathname,这行话的意思就是指定shell程序执行时被哪个解释器解释执行
- dash是ubuntu中默认使用的脚本解释器。
- #开头的行是注释行
3.shell编程学习
3.1 输入输出
1 strinjg="ni hao"
2 echo $strinjg
3 echo 'hello"world'
- 在shell中赋值的=两边是不能有空格的。
- shell中引用一个变量必须使用$符号,$符号就是变量解引用符号。
- 变量引用的时候可以$var,也可以${var}。这两种的区别是在某些情况下只能用${var}而不能简单的$var
1 Echo ‘hello”world’----- hello”world
2 Echo “hello”world”----- hello”world
3 Echo ‘hello”world’----- hello”world
- shell中使用字符串可以不加双引号,直接使用。而且有空格时也可以,但是缺陷是不能输出"或者其他转义字符。
- 单引号中:完全字面替换(不可包含单引号本身)
1 #!bin/sh
2 #反斜号
3 #p=`pwd`
4 #echo $p
- 反引号括起来执行。有时候我们在shell中调用linux命令是为了得到这个命令的返回值
3.2.if的典型应用
1 #判断文件是否存在,如果不存在则创建
2 #if [ -f a.txt ];then
3 # echo "yes"
4 #else
5 # echo "no"
6 # touch a.txt
7 #fi
8
9 #判断字符串是否相等
10 #if [ "abc" = "afc" ];then
11 # echo "equal"
12 #else
13 # echo "not wqual"
14 #fi
15
16 #判断数字是否相等
17 #if [ 12 -eq 12 ];then
18 # echo "equal"
19 #else
20 # echo "not wqual"
21 #fi
- 判断文件是否存在。(-f),注意[]里面前后都有空格,不能省略。[ -f a.txt ]
- 判断目录是否存在 (-d)
- 判断字符串是否相等("str1" = "str2"),注意用一个等号而不是两个
- 判断数字是否相等(-eq)、大于(-gt)、小于(-lt)、大于等于(-ge)、小于等于(-le)
- 判断字符串是否为空(-z)
1 #-o表示逻辑或
2 #if [ 112 -eq 12 -o "aabc" = "abc" ];then
3 # echo "yes"
4 #else
5 # echo "no"
6 #fi
- 相当于C语言中在if后面的条件式中用逻辑与、逻辑或来连接2个式子,最终的if中是否成立取决于2个式子的逻辑运算结果。
3.3.shell中的循环结构
1 #!bin/sh
2 #for循环
3 for i in `ls`
4 do
5 echo $i
6 done
3.4 追加文件
- 在shell中可以直接使用echo指令新建一个文件,并且将一些内容传入这个文件中。创建文件并输入内容的关键就是>。
- 还可以使用echo指令配合追加符号>> 向一个已经存在的文件末尾追加输入内容。
3.5.shell中其他值得关注的知识点
3.5.1 case语句
- break只用于循环跳出
- $#表示调用该shell时传参的个数
1 #case语言演示
2 #var=1
3 #1) echo "1" ;;
4 #2) echo "2" ;;
5 #esac
6
7 #演示shell传参
8 #echo $# $0 $1 $2 $3
二、Makefile基础回顾
1.Makefile的作用和意义
- Makefile来做项目管理
- make xxx的过程其实就是使用命令将依赖加工成目标的过程。
2.一些命令
- %是Makefile中的通配符
- 伪目标:单纯为了执行这个目标下面的命令,用.PHONY来明确声明它是伪目标
- Makefile中的注释用#
- @表示静默执行
- = 最简单的赋值---->不能只往前面看,还要往后面看
- := 一般也是赋值---->只用往前看即可
- ?= 如果变量前面并没有赋值过则执行这条赋值,如果前面已经赋值过了则本行被忽略
- += 用来给一个已经赋值的变量接续赋值
3.命令补充2
- * 若干个任意字符
- ? 1个任意字符
- [] 将[]中的字符依次去和外面的结合匹配
- $@ 规则的目标文件名
- $< 规则的依赖文件名,第一个文件名
- $^ 依赖的文件集合