zoukankan      html  css  js  c++  java
  • 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个任意字符
    • []      将[]中的字符依次去和外面的结合匹配
    • $@     规则的目标文件名
    • $<     规则的依赖文件名,第一个文件名
    • $^     依赖的文件集合
  • 相关阅读:
    Python读写文件学习笔记
    前端轻量级、简单、易用的富文本编辑器 wangEditor 的基本用法
    选择本地文件上传控件 input标签
    push 和 append 以及appendchild 用法和区别
    关于时间获取和时间戳的换算
    动态设置html根字体大小(随着设备屏幕的大小而变化,从而实现响应式)
    JS 判断是否为安卓或IOS系统
    JS动态获取 Url 参数
    for 循环遍历数据动态渲染html
    VUE框架下安装自带http协议
  • 原文地址:https://www.cnblogs.com/zyj23/p/12312427.html
Copyright © 2011-2022 走看看