shell编程:
编译器,解释器
编程语言:机器语言、汇编语言、高级语言
静态语言:编译型语言
强类型(变量):变量在使用前,必须事先声明,甚至还需要初始化
关键字:
事先转换成可执行格式
C、C++、JAVA、C#
动态语言:解释型语言,on the fly
弱类型:边解释边执行,变量用时声明,甚至不区分类型:
PHP、shell、python、perl
面向过程: shell、C
面向对象:JAVA、python,perl,C++
变量:
变量:内存空间的命名
内存:编址的存储单元
进程:一个程序运行会产生相关进程。
计算机数据的基本存储单位。 8bit(位)=1Byte(字节) 1024Byte(字节)=1KB 1024KB=1MB 1024MB=1GB 1024GB=1TB
变量类型:事先确定数据的存储格式和长度。
一个字符占一个字节,一个汉字占两个字节
字符:
数值:
整型
浮点型:11.23/1.123*10^1/0.1123*10^2
2015/10/10:64bit
99999 :24bit
10(字符)2个字符 16bit
10 (数值) 1010 4位 8bit (一个字节8位)
整型,8bit:256
0-255, 溢出
布尔型:真假型
逻辑运算:与、或、非、异或
1:真
0:假
异或:两个操作数相同为假,不同为真
变量赋值:VAR_NAME=VALUE
bash变量类型:
环境变量
本地变量(局部变量)
位置变量
特殊变量
环境变量:作用域为当前shell进程及其子进程
export VARNAME=VALUE 或
VARNAME=VALUE
export VARNAME
“导出”
本地变量:整个bash进程都可以使用
set VARNAME=VALUE
局部变量:作用域为当前代码段
local VARNAME=VALUE
脚本在执行时会启动一个子shell进程:
命令行中启动的脚本会继承当前shell环境变量;
系统自动执行的脚本(非命令行启动)就需要自我定需要各环境变量;
bash进程中定义变量
引用变量:${VARNAMW},有时候括号可省略。
“”弱引用,变量可做替换的
‘’强引用,变量不可做替换的
位置变量:
$1,$2,.....
特殊变量:
$? :上一个命令的执行状态返回值(正确或错误);
程序执行后,可能有两类返回值:
程序执行结果
程序状态返回代码(0-255)
0 :正确执行
1-255 :错误执行,1,2,127系统预留;
判断一个用户是否存在:
输出重定向:
>
>>
2>
2>>
&>
/dev/null : 软件设备,bit bucket,数据黑洞。
查看当前shell中的变量:set
查看当前shell中的环境变量:printenv、env、export
变量中追加变量(给字符串变量赋值)
变量默认是字符型,不能做算术运算的
脚本:命令的堆砌,按实际需要,结合命令流程控制机制实现的程序
Linux内核只能识别ELF(可执行可链接)格式
Linux内核是不能识别ASCII格式的,发现这不是可执行文件的时候得告诉内核这是一个脚本,让内核启动一个脚本解释器来执行它。
每个脚本开头行都有一个魔数(shebang):
#!/bin/bash (以#!开头,后面接着解释器路径)
要想要脚本独立执行脚本文件必须有执行权限
变量名称:
1、只能包含字母、数字和下划线,并且不能数字开头
2、不应该跟系统中已有的环境变量重名
3、最好做到见名知意
练习:写一个脚本,完成以下任务
1、添加5个用户,user1,.....,user5
2、每个用户的密码同用户名,而且要求,添加密码完成后不显示passwd命令的执行结果信息
3、每个用户添加完成后,都要显示用户某某已经成功添加。