shell编程
编译器,解释器
静态语言:编译器语言(强类型变量),事先转换成可执行格式,甚至还需初始化
C, C++, JAVA, C#
动态语言:解释型语言(弱类型变量),边解释变执行,甚至不区分类型
PHP, SHELL, python, perl
面向过程:Shell, C
面向对象:JAVA, Python, perl, C++
与:只要有一个为假,结果一定为假
或:只要有一个为真,结果一定为真
bash变量类型:
环境变量
本地变量
位置变量
特殊变量
本地变量:
VARNAME=VALUE:作用域为整个bash进程
局部变量:
local VARNAME=VALUE:作用域为当前代码段
环境变量:作用域为当前shell进程及其子进程:
export VARNAME=VALUE
VARNAME=VALUE
export VARNAME
"导出"
位置变量:
$1, $2, ……
特殊变量:
$? : 上一个命令的执行状态返回值
程序执行,有两类返回值
程序执行结果
程序转态返回代码(0-255)
0:正确执行
1-255:错误执行 1,2,127系统预留
撤销变量:
unset VARNAME
变量名称要求
1、只能包含字母,数字,下划线,并且不能以数字开头
2、不应该跟系统中已有的环境变量重名
3、最后做到见名知意
查看当前shell变量
set
查看当前shell中的环境变量
printenv
env
export
/dev/null:软件设备 bit bucket数据黑洞
脚本在执行时会启动一个子shell进程
命令行中启动的脚步会继承当前shell环境变量
系统自启动执行的脚步(非命令行启动)就需要自我定义需要各环境变量
脚本:命令的堆砌,按实际需要,结合命令流程控制机制实现的源程序
shebang:魔数
脚本第一行:#!bin/bash
#注释行,不执行
运行脚本
法一
1,编写脚本
2,加权限(独立执行必须加权限)
3,当前路径加到环境变量中去,或在当前路径下执行
法二:
1,编写脚本
2,在解释器下解释脚本,当做bash的参数
条件判断:
如果用户不存在
添加用户,给密码并显示添加成功
否则
不添加
bash中如何实现添加判断?
条件测试类型:
整数测试
字符测试
文件测试
条件测试的表达式:
[ expression ]
[[ expression ]]
test expression
整数比较:
-eq:测试两个整数是否相等;比如$A -eq $B
-ne:测试两个整数是否不等,不等为真,否则为假
-gt:测试一个数是否大于另一个数:大于为真,否则为假
-lt:测试一个数是否小于另一个数:小于为真,否则为假
-ge:大于或等于
-le:小于或等于
命令间的逻辑关系:
逻辑与: &&(只要有一个为假,结果一定为假)
第一个条件为假,第二个就不必执行
第一个条件为真,就要执行第二个
逻辑或:||(只要有一个为真,结果一定为真)
第一个条件为真,第二个就不必执行
第一个条件为假,就要执行第二个
课堂1、如果/etc/inittab文件的行数大于100,就显示有几行的文件
wc -l /etc/inittab |
课堂2、如果用户存在,就显示用户已经存在,否则,就添加此用户
! id user1 && echo "user1 exists." || useradd user1
课堂3、如果用户不存在,就添加,否则,显示其已存在
! id user1 && useradd user1 || echo "user1 is "
课堂4、如果用户不存在,添加并且给密码,否则,显示其已经存在
! id user1 && useradd user1 && echo “user1” | passwd --stdin user1 || echo "user1 is"
5-3练习
1、写一个脚本,完成以下任务:
(1)使用一个变量保存一个用户名
(2)删除此变量中的用户,且一并删除其家目录
(3)显示“用户删除完成”类信息
2、写一个脚本,完成以下要求:
(1)添加3个用户user1,uuser2,user3,但要先判断用户是否存在,不存在而后再添加
(2)添加完成后,显示一共添加了几个用户,当然,不能包括事先存在而没有添加的
(3)最后显示当前系统上共有多少个用户
3、写一个脚本,完成以下要求:
(1)给定一共用户,如果其UID为0,就显示此为管理员
(2)否则,就显示为普通用户
条件判断,控制结构:
单分支if语句
if 判断条件,then
statement1
statement2
...
fi
双分支的if语句
if 判断条件,then
statement1
statement2
...
else
statement4
statement5
...
fi