shell编程
编译器,解释器
编程语言:机器语言(0/1)、汇编语言、高级语言:
静态语言:编译型语言:有一个程序开发环境,不需要借助额外的二进制程序,可以直接写代码,编译器将其直接转换成二进制后可以独立运行的编程语言(不单独需要解释器,可以自我独立执行)。在程序执行之前,编译过程是事先全部转换成可执行格式,只有完全转换完成后程序才能执行。
解释器本身通常都是静态语言开发的
通常是强类型(变量):变量在使用前,必须事先声明类型,甚至还需要初始化(给一个原始值,随机数,数值要初始化为0,字符串初始化为空(null))
如:C、C++、JAVA、C#
关键字:能够直接被编译器转换成能够被机器识别的机器代码或者机器指令
动态语言:解释型语言(on the fly):不需要转换成二进制格式,解释器解释一条执行一条,边解释边执行,程序只有在执行的时候才进行转换。
通常是弱类型:变量用时声明,甚至不区分类型(默认为字符串)
如:ASP、PHP、SHELL、python、perl
显式转换,隐式转换(变量转换类型在不同,编译型语言在编译时转换,解释型语言在解释时转换)
bash:因此我们如果要运行bash脚本,系统上必须有bash本身这个可执行程序,bash此时叫脚本解释器
面向过程:SHELL,C。把编程着眼点主要在于问题解决过程本身(linux内核是使用面向过程的C语言研发的)
面向对象:JAVA,Python,perl,C++。把整个要实现的项目抽象成一个个对象,并且定义对象之间的动作
变量:命名的内存空间(进程内部维护有映射表,变量名称对应内存的起始地址)
内存:编址的存储单元(物理内存的每一个字节都有一个全局的唯一地址)
10,如果存储为字符需要16bit(1和0分别对应两个ASCⅡ码表中的两个字符,每个字符需要一个字节,8bit)
10,如果存储为数值,二进制为1010,只有4bit,而计算机最小存储单位是字节,因此最终需要8bit
因此究竟把10存储为字符还是数值,好确定所需的内存空间,则需要确定变量类型。
变量类型:事先确定数据的存储格式和长度
字符型
数值型:整型
浮点型:带小数点精度
真假/逻辑/布尔型:逻辑:1+1>2
逻辑运算:与(有假即假,无假为真)、或(有真为真,无真为假)、非(取反,!)、异或(操作数相同则为假,不同则为真,真真得假,假假得假,真假得真,假真得真)
在计算机中,逻辑运算是通过电极管完成运算的。
短路逻辑运算:与,有一个为假则为假。
或,有一个为真则为真。
对于静态语言,必须要事先确定所用到的每一个变量的变量类型。如果数据在规定内存内保存不下,就会溢出。
编程能力:脚本编程
变量赋值:VAL_NAME=VALUE
bash变量类型(根据变量本身的作用范围以及变量本身的表示形式这个不同的标准分类):
环境变量:作用域为当前shell进程及其子进程
export VARNAME=VALUE "导出"
或拆分成 VARNAME=VALUE
export VARNAME
脚本在执行时会启动一个子shell进程:
命令行中启动的脚本会继承当前命令行的环境变量
系统自动执行的脚本(非命令行启动)就需要自我定义需要的各环境变量
本地变量(子概念:局部变量): bash
引用变量:${VARNAME}(括号在大多数情况下可省略,指代不清的时候不可省)
本地变量:(set) VARNAME=VALUE(作用域为整个bash脚本进程中都可以引用)
局部变量:local VARNAME=VALUE(变量是局部的,作用域为当前代码段)
位置变量:$1,$2,...
特殊变量(bash内置的保存特殊数据的特殊变量,也称系统变量)
$?:上一个命令的执行状态返回值
程序执行,可能有两类返回值:程序执行结果 ``
程序状态返回代码(0-255):0:正确执行
1-255:错误执行(代表各种错误:1,2,127系统预留了,有特殊的错误意义。命令错误,参数错误等)
撤销变量:unset VARNAME
查看当前shell中的变量:set (查看所有变量)
查看当前shell中的环境变量:printenv
env
export
特殊变量和位置变量无法查看
对于字符串来说,如果要改变其值,可以在后面附加一个新内容,用“:”连接
脚本:命令的堆砌,按实际需要,结合命令流程控制机制实现的源程序
单纯的命令行保存后是一个ASCⅡ文件,是无法执行的,linux只能执行ELF格式文件
shebang:魔数 magic number
#!/bin/bash(#!接解释器路径,脚本是什么格式的脚本,解释器在什么位置,脚本的第一行必须这么写)
#注释行,不执行
脚本无执行权限也可以执行,比如将脚本名写在bash后面,这样就是作为bash的一个参数来执行而不是作为一个脚本来执行,但是也可以执行,但是要想独立执行,必须给执行权限
变量名称:1、只能包含字母,数字和下划线,并且不能以数字开头
2、不应该跟系统中已有的环境变量重名
3、最好做到见名知义
网友评论