一、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 helloworld’----- helloworld
  2. Echo hello\”world”----- helloworld
  3. Echo hello\”world’----- helloworld
  • 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=
  3. #) echo "" ;;
  4. #) echo "" ;;
  5. #esac
  6.  
  7. #演示shell传参
  8. #echo $# $ $ $ $

二、Makefile基础回顾

1.Makefile的作用和意义

  • Makefile来做项目管理
  • make xxx的过程其实就是使用命令将依赖加工成目标的过程。

2.一些命令

  • %是Makefile中的通配符
  • 伪目标:单纯为了执行这个目标下面的命令,用.PHONY来明确声明它是伪目标
  • Makefile中的注释用#
  • @表示静默执行
  • =      最简单的赋值---->不能只往前面看,还要往后面看
  • :=     一般也是赋值---->只用往前看即可
  • ?=  如果变量前面并没有赋值过则执行这条赋值,如果前面已经赋值过了则本行被忽略
  • +=  用来给一个已经赋值的变量接续赋值

3.命令补充2

  • *      若干个任意字符
  • ?      1个任意字符
  • []      将[]中的字符依次去和外面的结合匹配
  • $@     规则的目标文件名
  • $<     规则的依赖文件名,第一个文件名
  • $^     依赖的文件集合

shell和Makefile的更多相关文章

  1. shell 或 Makefile 学习网站

    1.http://man.linuxde.net/ 2.http://www.cnblogs.com/peida/archive/2012/12/05/2803591.html

  2. 说说Makefile那些事儿

    说说Makefile那些事儿 |扬说|透过现象看本质 工作至今,一直对Makefile半知半解.突然某天幡然醒悟,觉得此举极为不妥,只得洗心革面从头学来,以前许多不明觉厉之处顿时茅塞顿开,想想好记性不 ...

  3. Makefile的编写

    makefile介绍 makefile的功能是管理源文件的编译链接,在makefile我们可以定义一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能 ...

  4. 怎么写makefile?(转)

    跟我一起写 Makefile 陈皓 第一章.概述 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和 pr ...

  5. 【转】Linux makefile 教程 非常详细,且易懂

    From: http://blog.csdn.net/liang13664759/article/details/1771246 最近在学习Linux下的C编程,买了一本叫<Linux环境下的C ...

  6. linux中Makefile文件相关内容

    第一章.概述什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional(专业)的程序员,m ...

  7. Makefile经典教程(掌握这些足够)

    makefile很重要 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员 ...

  8. Linux makefile 教程 非常详细,且易懂

    最近在学习Linux下的C编程,买了一本叫<Linux环境下的C编程指南>读到makefile就越看越迷糊,可能是我的理解能不行. 于是google到了以下这篇文章.通俗易懂.然后把它贴出 ...

  9. 转载-------makefile 使用总结

    转载自:http://www.cnblogs.com/wang_yb/p/3990952.html 1. Makefile 简介 Makefile 是和 make 命令一起配合使用的. 很多大型项目的 ...

随机推荐

  1. java web 学生信息录入

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  2. requests 用法小速记

    Request库安装方法 Request官网 使用管理员权限启动 command控制台(win+X 命令提示符(管理员)) 使用pip安装requests库(默认配置好python以及pip的环境变量 ...

  3. uniGUI之UniSyntaxEdit(24)

    UniSyntaxEdit1语法高亮显示控件,主要属性Language,它是  多行 1]Language 语言 2]执行 FDquery1.Open(UniSyntaxEdit1.Lines.Tex ...

  4. IDEA 查看某个class的maven引用依赖&如何展示Diagram Elements

    1.打开对应的class,如下图所示,至于具体快捷键就不说了,我是设置的eclipse的快捷键: 2.定位到对应jar,记下jar名称及版本: 3.在右侧栏点击maven,再在展出的视图中找到对应的m ...

  5. js学习:基本数据类型

    数据类型在 js 里面分为两个大类: 基本数据类型 引用数据类型 基本数据类型: 数值 number 各种意义上的数字:整数.小数.浮点数等 正数:100 负数:-100 浮点数,小数:1.234 进 ...

  6. Python 的直接赋值、Deepcopy、Copy的区别

    直接赋值: 其实就是对象的引用 浅拷贝(copy): 只拷贝符对象,不会拷贝对象内部的子对象 深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象 有图有 ...

  7. selenium+chrome options

    selenium+chrome options 环境:selenium chrome 1.      selenium + chrome参数配置 1.1.    启动 from selenium im ...

  8. SOAP1.1 VS SOAP1.2

    SOAP提升: 目前WebService的协议主要有SOAP1.1和1.2.两者的命名空间不同. 见下页对比 SOAP1.1版本与SOAP1.2版本在头信息上存在差异.SOAP1.1存在SOAPAct ...

  9. Django中的prefetch_related()函数优化

    对于多对多字段(ManyToManyField)和一对多字段, 可以使用prefetch_related()来进行优化 prefetch_related()和select_related()的设计目的 ...

  10. git push的时候报错: Out of memory, malloc failed (tried to allocate 82037333 bytes)

    原因:上传的文件过大,这里我上传的文件有10G+所以报了上面的错误 解决方法:依次运行:git config --global pack.threads 1 git,git config --glob ...