底层硬件的调配和控制由linux内核负责,内核提供了API供我们编程调用,从而使用硬件资源。

库文件是更便于调用,功能更强大的公用接口,类似于API.可以认为是若干API的组合。

应用程序可以调用API来实现功能。也可以调用库文件,间接地调用API来实现功能。

shell是内核提供给用户的一个界面,用于用户和内核进行交互。

shell接收用户的操作指令,翻译成内核能够理解的类型,交给内核从而让内核来控制硬件执行。shell把运行结果转换成用户能识别的格式交给用户。

所以,shell也是一种命令解释器。


shell脚本是否可以执行,除了权限为可执行(x)外,还和文件的内容有关。

脚本第一行必须是  #!/pathToShell/shellName   比如#!/bin/bash

#! 叫shebang。出现在文本文件第一行的最前面两个位置。这种情况下,类unix操作系统的载入程序会分析shebang后的内容,并将这些内容作为解释器指令。载入程序将调用该解释器指令,并将该文本文件的名称作为该解释器的参数。(在shell中执行脚本,shell先读出脚本文件的第一行,分析是否有shebang,如果有,就将shebang后面的内容当做命令解释器,并调用,同时将该脚本的文件名当做参数($0)传递给这个解释器。命令解释器一般是个shell。调用命令解释器,一般是启动了一个子shell).


shell可以调用现成的程序,但是不能直接调用API。

shell脚本:ascii码格式的,用程序控制符将若干命令组合起来实现某种功能的特殊的文本文档。这种文档可以被shell理解并按照设计的逻辑来运行里面的命令。所以被称作可执行文档、脚本。

shell脚本类似于windows中的批处理。


程序代码:由语句和表达式组成

表达式简单的可以理解成某语言的语法,而由这些语法构成的一条执行语句则是表达式语句。


面向过程的编程中,语句执行方式

    1.顺序执行(默认)。

    2.选择执行 程序分支,通过条件判断选择不同的分支去执行。

    3.循环执行 将一段代码反复执行有限次,所以应该有退出条件。


编程语言的分类

按照执行方式分    

    1.动态语言:

    所有语句解释执行,解释一句执行一句。变量在用到的时候才定义,不需提前定义。

    如:perl、bash、python

    2.静态语言:

    源代码必须完全编译,生成可执行的二进制文后才能运行。变量要提前定义好。

    如:c、c++

按照变量类型的限制

    1.弱类型语言:

    变量无需明确声明数据类型。默认都以字符格式存储。不便于存储和操作。如bash脚本

    2.强类型语言:

    变量必须明确声明数据类型,便于存储和操作。如 c、c++、python等



动态类型语言是弱类型的。