一、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的更多相关文章

  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集合知识点

    若不重写equals方法,则调用的是object对象的equals方法,相当于==比较,比较的是对象的内存地址 |------Collection接口:单列集合,用来存储一个一个对象 |------L ...

  2. Vue——路由回退至指定页面

    先来引出一下遇到的问题:在做一个移动端支付页面,在付款页面点击支付按钮,支付失败时跳转至支付失败提示页面:支付成功时跳转至支付成功页面.在支付成功页面下,如果用户点击手机自带的“返回”键,就又会跳转至 ...

  3. 路由器安全-FPM

    1.FPM(也叫NGACL) FPM是Cisco IOS新一代的ACL,叫做Flexible Packet Matching,灵活的包匹配. 根据任意条件,无状态的匹配数据包的头部,负载,或者全部. ...

  4. Springboot - 更优雅的方式请求发 HTTP 请求

    参考:https://www.cnblogs.com/javazhiyin/p/9851775.html RestTemplate 是 Spring 提供的用于访问Rest 服务的客户端RestTem ...

  5. 【转】uWSGI+django+nginx的工作原理流程与部署历程

    一.前言献给和我一样懵懂中不断汲取知识,进步的人们. 霓虹闪烁,但人们真正需要的,只是一个可以照亮前路的烛光 二.必要的前提 2.1 准备知识 1.django 一个基于python的开源web框架, ...

  6. python脚本监听nginx是否运行

    import sys import time import os import logging from logging.handlers import RotatingFileHandler imp ...

  7. 「CF1301C Ayoub's function」

    本题结论题,所以就不放前置芝士了. 具体做法 先将最终的答案分为两部分,区间(开始于结束为止不同)和点,点的个数非常显然就是M,于是要计算区间的个数,可以发现如果直接计算有多少合法区间很麻烦,所以用总 ...

  8. [排错] SpringBoot 警告 Could not find acceptable representation

    环境 Java 1.8 SpringBoot 2.1.9 Java 接口代码 @ResponseBody @RequestMapping(value = "cloud", meth ...

  9. 爬虫(十四):Scrapy框架(一) 初识Scrapy、第一个案例

    1. Scrapy框架 Scrapy功能非常强大,爬取效率高,相关扩展组件多,可配置和可扩展程度非常高,它几乎可以应对所有反爬网站,是目前Python中使用最广泛的爬虫框架. 1.1 Scrapy介绍 ...

  10. Vulnhub_DC1 记录

    目录 Vulnhub_DC1 记录 经验 & 总结 步骤流水 1. 建立立足点 2. 提权 3. 主机信息搜集 4. 继续提权 5. 消失的flag Vulnhub_DC1 记录 参考walk ...