Shell编程
编译器,解释器
编程语言:机器语言、汇编语言、高级语言
静态语言:编译型语言(编译除错然后生成二进制文件)
强类型(变量在使用前,必须事先声明甚至初始化:数值默认初始化为0,字符初始化为空-Null)
事先转换成可执行格式(C、C++、JAVA、C#)
动态语言:解释型语言
弱类型(变量用时声明,甚至不区分类型-显示转换或隐示转换)
边解释边执行
PHP、Shell、Python、Perl(对象和过程)
面向过程:把编程的着眼点,立足点主要在于问题过程本身。(linux内核是使用面向过程的C语言研发的,shell脚本面向过程)
面向对象:把整个要实现的项目抽象成一个个对象,并且定义对象之间的动作(就是可发生的操作)来完成,因此这种方式或风格更适合开发大型应用程序。(JAVA,Python,C++)
变量:内存空间,命名
物理内存:编号地址的存储单元
进程:
1+...+100
1+...+100000
变量类型(用于事先确定数据的存储格式和长度)
10:16bit(字符存储)
10:二进制为1010(数值存储)8bit=1Byte 变量分整型、浮点型
如2014/4/14存储为字符或数值,存储空间(长度)和存储格式
定义为整型数据,8bit(0-255),如果存256,溢出
变量赋值:VAR_NAME=VALUE
bash变量类型:
环境变量
本地变量(局部变量)
位置变量
特殊变量
本地变量:
(set) VARNAME=VALUE (set) 表示可省略,作用域为整个bash进程,直到该bash进程/脚本结束
局部变量:
local VARNAME=VALUE 作用域为当前代码段
环境变量:作用域为当前shell进程及其子进程(如果重开一个窗口或控制台,不再适用)
export VARNAME=VALUE (export: 导出)
或者VARNAME=VALUE
export VARNAME
位置变量:
关联到脚本参数,如$1,$2,...
特殊变量:
$? 保存上一个命令的执行状态返回值
程序执行,可能有两类返回值
程序执行结果
程序状态返回代码(0-255)
0:正确执行
1-255:错误执行,1,2,127系统预留
输出重定向:
>
>>
2>
2>>
&> 无论正确还是错误,都同时定向到某处
/dev/null:软件(模拟)设备,bit bucket,数据黑洞
撤销变量(环境变量、本地变量)
unset VARNAME
查看当前shell中变量:
set
信息中包含环境变量和本地变量
如果只想查看当前shell中的环境变量
printenv
env
export
变量中添加值(或者路径)
变量不做数学运算
脚本:命令的堆砌,按实际需要,结合命令流程机制实现的源程序
也可在没有权限情况下,指定特定解释器来执行脚本
脚本在执行会启动一个子shell进程:
命令行中执行的脚本会继承当前的shell环境变量;
系统自动执行的脚本(非命令行启动)就需要自我定义需要各环境变量;
bash
引用变量:${VARNAME}
单引号:强引用,不做变量替换。
双引号:弱引用,做变量替换。
{}:只要在不引起变量误解的地方,可以不用加,否则得加上。
算术运算
逻辑运算:与或非,异或