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]传给他运行。
#!bin/sh
echo "hello world"
- #! /bin/sh 这行话以#!开始,后面加上一个pathname,这行话的意思就是指定shell程序执行时被哪个解释器解释执行
- dash是ubuntu中默认使用的脚本解释器。
- #开头的行是注释行
3.shell编程学习
3.1 输入输出
strinjg="ni hao"
echo $strinjg
echo 'hello"world'
- 在shell中赋值的=两边是不能有空格的。
- shell中引用一个变量必须使用$符号,$符号就是变量解引用符号。
- 变量引用的时候可以$var,也可以${var}。这两种的区别是在某些情况下只能用${var}而不能简单的$var
Echo ‘hello”world’----- hello”world
Echo “hello\”world”----- hello”world
Echo ‘hello\”world’----- hello”world
- shell中使用字符串可以不加双引号,直接使用。而且有空格时也可以,但是缺陷是不能输出"或者其他转义字符。
- 单引号中:完全字面替换(不可包含单引号本身)
#!bin/sh
#反斜号
#p=`pwd`
#echo $p
- 反引号括起来执行。有时候我们在shell中调用linux命令是为了得到这个命令的返回值
3.2.if的典型应用
#判断文件是否存在,如果不存在则创建
#if [ -f a.txt ];then
# echo "yes"
#else
# echo "no"
# touch a.txt
#fi #判断字符串是否相等
#if [ "abc" = "afc" ];then
# echo "equal"
#else
# echo "not wqual"
#fi #判断数字是否相等
#if [ 12 -eq 12 ];then
# echo "equal"
#else
# echo "not wqual"
#fi
- 判断文件是否存在。(-f),注意[]里面前后都有空格,不能省略。[ -f a.txt ]
- 判断目录是否存在 (-d)
- 判断字符串是否相等("str1" = "str2"),注意用一个等号而不是两个
- 判断数字是否相等(-eq)、大于(-gt)、小于(-lt)、大于等于(-ge)、小于等于(-le)
- 判断字符串是否为空(-z)
#-o表示逻辑或
#if [ 112 -eq 12 -o "aabc" = "abc" ];then
# echo "yes"
#else
# echo "no"
#fi
- 相当于C语言中在if后面的条件式中用逻辑与、逻辑或来连接2个式子,最终的if中是否成立取决于2个式子的逻辑运算结果。
3.3.shell中的循环结构
#!bin/sh
#for循环
for i in `ls`
do
echo $i
done
3.4 追加文件
- 在shell中可以直接使用echo指令新建一个文件,并且将一些内容传入这个文件中。创建文件并输入内容的关键就是>。
- 还可以使用echo指令配合追加符号>> 向一个已经存在的文件末尾追加输入内容。
3.5.shell中其他值得关注的知识点
3.5.1 case语句
- break只用于循环跳出
- $#表示调用该shell时传参的个数
#case语言演示
#var=
#) echo "" ;;
#) echo "" ;;
#esac #演示shell传参
#echo $# $ $ $ $
二、Makefile基础回顾
1.Makefile的作用和意义
- Makefile来做项目管理
- make xxx的过程其实就是使用命令将依赖加工成目标的过程。
2.一些命令
- %是Makefile中的通配符
- 伪目标:单纯为了执行这个目标下面的命令,用.PHONY来明确声明它是伪目标
- Makefile中的注释用#
- @表示静默执行
- = 最简单的赋值---->不能只往前面看,还要往后面看
- := 一般也是赋值---->只用往前看即可
- ?= 如果变量前面并没有赋值过则执行这条赋值,如果前面已经赋值过了则本行被忽略
- += 用来给一个已经赋值的变量接续赋值
3.命令补充2
- * 若干个任意字符
- ? 1个任意字符
- [] 将[]中的字符依次去和外面的结合匹配
- $@ 规则的目标文件名
- $< 规则的依赖文件名,第一个文件名
- $^ 依赖的文件集合
shell和Makefile的更多相关文章
- shell 或 Makefile 学习网站
1.http://man.linuxde.net/ 2.http://www.cnblogs.com/peida/archive/2012/12/05/2803591.html
- 说说Makefile那些事儿
说说Makefile那些事儿 |扬说|透过现象看本质 工作至今,一直对Makefile半知半解.突然某天幡然醒悟,觉得此举极为不妥,只得洗心革面从头学来,以前许多不明觉厉之处顿时茅塞顿开,想想好记性不 ...
- Makefile的编写
makefile介绍 makefile的功能是管理源文件的编译链接,在makefile我们可以定义一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能 ...
- 怎么写makefile?(转)
跟我一起写 Makefile 陈皓 第一章.概述 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和 pr ...
- 【转】Linux makefile 教程 非常详细,且易懂
From: http://blog.csdn.net/liang13664759/article/details/1771246 最近在学习Linux下的C编程,买了一本叫<Linux环境下的C ...
- linux中Makefile文件相关内容
第一章.概述什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional(专业)的程序员,m ...
- Makefile经典教程(掌握这些足够)
makefile很重要 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员 ...
- Linux makefile 教程 非常详细,且易懂
最近在学习Linux下的C编程,买了一本叫<Linux环境下的C编程指南>读到makefile就越看越迷糊,可能是我的理解能不行. 于是google到了以下这篇文章.通俗易懂.然后把它贴出 ...
- 转载-------makefile 使用总结
转载自:http://www.cnblogs.com/wang_yb/p/3990952.html 1. Makefile 简介 Makefile 是和 make 命令一起配合使用的. 很多大型项目的 ...
随机推荐
- 为 git 设定 socks5 代理
为 git 设定 socks5 代理 查看当前设定 git config --global -l 为 git 设定全局代理 git config --global http.proxy socks5h ...
- Jmeter进行分布式性能测试
由于Jmeter本身的瓶颈,当需要模拟数以千计的并发用户时,使用单台机器模拟所有的并发用户就有些力不从心,甚至还会引起JAVA内存溢出的错误.要解决这个问题,可以使用分布式测试,运行多台机器运行所谓的 ...
- HDU5444 Elven Postman
按要求递归建树输出~ #include<cstdio> #include<algorithm> #include<cstring> using namespace ...
- 反射实现定位Servlet中的方法
public class BaseServlet extends HttpServlet{ @Override protected void service(HttpServletRequest re ...
- Tomcat 配置目录及文件说明!
==================================================================================
- 研究Zookeeper的原理(一)
阅读声明:以下内容是结合网上材料所写个人理解,如有不当,欢迎大家指正~~~谢谢 一.Zookeeper介绍 zookeeper,见名知意嘛,zoo动物园,keeper保持者.管理员,结合起来就是动物管 ...
- CAN数据格式-BLF
欢迎关注<汽车软件技术>公众号,回复关键字获取资料. Vector工具录制的数据,一般有ASC和BLF两种格式,本文介绍ASC. 1.BLF定义 BLF(binary logging fo ...
- 为PHP开发搭建环境
为了能在自己的电脑上(mac OS系统)开始编写PHP代码并完成运行,需要有: 1.安装Web服务器 2.安装PHP 3.安装数据库,比如MySQL 4.一个PHP的IDE 为了上面所提到的1~3步的 ...
- URL和 URI 的区别
URL:统一资源定位符 URI:统一资源标识符 URL 是 URI 的一个子集: 来源知乎 1.统一资源标识符 URI 就是在某一规则下能把一个资源独一无二的表示出来. 拿人做例子,假设这个世界上多有 ...
- Java基础 -5
方法的定义与使用 方法(method)的基本定义 本次方法定义在主类之中并且由主方法直接调用,所以方法的定义语法形式如下: public static 返回值类型 方法名称([参数类型 变量, ... ...