shell和Makefile

一、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个任意字符
  • []      将[]中的字符依次去和外面的结合匹配
  • $@     规则的目标文件名
  • $<     规则的依赖文件名,第一个文件名
  • $^     依赖的文件集合

 

你可能感兴趣的:(shell和Makefile)