shell编程:
编译器,解释器
编程语言:机器语言、汇编语言、高级语言
高级语言
静态语言:编译型语言,事先转换成可执行格式
强类型(变量)
关键字:
C、C++、JAVA、C#、、
动态语言:解释型语言,(onthe fly)边解释边执行,运行(执行)时需要解释器
弱类型
ASP、ASP.NET、PHP、SHELL、PYTHON、PERL
lua
shell,python,perl至少精通一种
面向过程:把编程着眼点或立足点主要在于问题解决过程 一般适用于小型编程
面向对象:把要实现的项目抽象为一个一个对象,并定义对像之间的动作或可发生的操作
一般适用于大型编程
shell,c是纯面向过程
java,python是纯面向对象
perl,c++即是即面向过程,也面向对象,c++是非常复杂的面向对象的语言
编程能力:
脚本编程
变量:变量是内存空间;变量是命名的内存空间;
内存:编址的存储单元
进程:
变量类型:事先确定数据的存储格式和长度
字符
数值
整型
浮点型
时间型
布尔型
逻辑:1+1>2
逻辑运算:与、或、非、异或
1:真
0:假
与运算
1 & 0 = 0
0 & 1 = 0
0 & 0 = 0
1 & 1 = 1
电路中的与运算:串联的两个开关为操作数,灯亮为真,灯灭为假
或
1 | 0 = 1
0 | 1 = 1
0 | 0 = 0
1 | 1 = 1
电路中的或运算:并联的两个开关为操作数,灯亮为真,灯灭为假
非
!1=0
!0=1
电路中非运算:操作数为开关1,
当开关1闭合,磁电产生磁场,磁场将开关2断开,灯灭
当开关1断开,磁电不产生磁场,开关2自然闭合,灯亮
异或运算:两个操作数相同得0,两个操作数不同得1
程序中有三种演算子:XOR、xor、⊕
1⊕1=0
0⊕0=0
1⊕0=1
0⊕1=1
短路逻辑运算
与运算的短路逻辑:只要有一个为假,结果肯定为假
或运算的短路逻辑:只要有一个为真,结果肯定为真
shell 是弱类型编程语言
强:变量在使用前,必须事先声明,甚至还需要初始化;
空为null
弱:变量用时声明(意思是直接拿来用);甚至不区别类型;
显示转换
隐示转换
变量赋值:VAR_NAME=VALUE
BASH变量类型
环境变量
本地变量(局部变量)
位置变量
特殊变量(系统变量)
本地变量:
引用变量(替换变量):${VARNAME},通常情况下{}可以省略
‘’为强引用(替换):内部引用的变量不会被替换
“”为弱引用(替换):内部引用的变量会被替换
声明本地变量(作用域:整个BASH进程)
[set] VARNAME=VALUE
set可以省略
声明局部变量(作用域:当前代码段)
[set] local VARNAME=VALUE
声明环境变量(作用域:当前SHELL进程及其子shell进程)
[set] export VARNAME=VALUE
“导出”
位置变量:
$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环境变量
系统自动执行的脚本(非命令行启动)就需要自我定义需要的各环境变量
脚本:命令的堆砌,按实际需要,结合命令流程控制机制实现的源程序
shebang:魔数