编程语言:机器语言、汇编语言、高级语言三种语言
高级语言中又分为:
静态语言:编译型语言
强类型(变量)
事先转换成可执行格式如:
C、C++、JAVA、C#
需要事先转换成可以执行格式
动态语言:解释型语言, on the fly
弱类型
边解释边执行
ASP、PHP、SHELL、python
通过转换器边解释边执行
---------------------------------------------------------------------------------------
面向过程:Shell, C
面向对象: JAVA, Python, perl, C++
接下来咱们来来了解一下SHELL~~
shell: 弱类型编程语言
强:变量在使用前,必须事先声明,甚至还需要初始化;
例如:INT NUM=0
弱:变量用时声明,甚至不区分类型;
例如: #: AAAA
bash 变量类型分为:
本地变量:
set VARNAME=VALUE: 作用域为整个bash进程;
局部变量:
local VARNAME=VALUE:作用域为当前代码段;
环境变量:作用域为当前shell进程及其子进程;
export VARNAME=VALUE
VARNAME=VALUE
export VARNAME
“导出”
脚本再执行时会启动一个子shell进程;
命令行中启动的脚本会继承当前SHELL环境变量;
系统自动执行的脚本就需要自我定义需要各环境变量.
位置变量:
$1, $2, ...
特殊变量:
$?: 上一个命令的执行状态返回值;
程序执行,可能有两类返回值: 程序执行结果
程序状态返回代码(0-255)
0: 正确执行
1-255:错误执行,1,2,127系统预留;
撤消变量:unset VARNAME
查看当shell中变量:
set
查看当前shell中的环境变量:
printenv
env
export
脚本:命令的堆砌,按实际需要,结合命令流程控制机制实现的源程序
shebang: 魔数
#!/bin/bash //可以用which bash 查看路径
# 注释行,不执行
/dev/null: 软件设备, bit bucket,数据黑洞
脚本在执行时会启动一个子shell进程;
命令行中启动的脚本会继承当前shell环境变量;
系统自动执行的脚本(非命令行启动)就需要自我定义需要各环境变量;
举个栗子:
通过一个脚本创建5个目录,分别为d1,d2...d5,
每个目录添加成功后都要显示XX目录添加成功
条件判断:
如果目录不存在
添加目录,显示添加成功;
否则
显示如果已经没在,没有添加;
if ...else语句
但是再Bash中如何实现条件语句呢?
条件测试类型:整数测试、字符测试、文件测试
条件测试的表达式:
[ expression ]
[[ expression ]]
test expression
整数比较:
-eq: 测试两个整数是否相等;比如 $A -eq $B
-ne: 测试两个整数是否不等;不等,为真;相等,为假;
-gt: 测试一个数是否大于另一个数;大于,为真;否则,为假;
-lt: 测试一个数是否小于另一个数;小于,为真;否则,为假;
-ge: 大于或等于
-le:小于或等于
命令的间逻辑关系:
逻辑与: &&
第一个条件为假时,第二条件不用再判断,最终结果已经有;
第一个条件为真时,第二条件必须得判断;
逻辑或: ||
----------------------------------------------------------------------------------------
上章的练习有没有做呢?
练习题:
1.显示/proc/meminfo文件中以不区分大小的s开头的行
2、显示/etc/passwd中以nologin结尾的行;
3、取出默认shell为/sbin/nologin的用户列表
4、显示/boot/grub/grub.cfg文件中以一个或多个空白字符开头的行;