bash shell脚本编程:
顺序执行
选择分支 if
循环执行 for while until
进入条件: for:列表元素非空
while:条件测试结果为真
until:条件测试结果为假
退出条件
for:列表元素遍历完成
while:条件测试结果为假
until: 条件测试结果为真
循环控制语句:
continue:提前结束本轮循环,直接进入下一轮循环判断
break:跳出循环,直接结束循环体
创建死循环: while true ;do 循环体 done 退出方式 break
sleep:睡眠 sleep number(单位秒)
while循环特殊用法
while read 变量;do 循环体 done<文件
依次读取文件中的每一行,且赋值给变量。
for循环特性用法:
for((控制变量初始化;条件判断式;控制变量的修整语句));do 循环体 done
控制变量初始化,仅在循环代码开始时执行一次 控制变量的修整语句:每轮循环结束会进行控制变量的修正运算,而后做条件判断
case语法格式
case 变量 in
模式)
分支1
;;
模式)
分支二
;;
。。。。。
esac
case支持glob风格的通配符
*表任意长度的任意字符 ?:任意单个字符 []:范围内任意单个字符 a|b:a或b
函数:function 把一段独立功能的代码当做当做有个整体,并为之取一个名字,命名的代码段此即为函数。
注意:定义函数的代码段不会自动执行,在调用时执行,所谓调用函数,在代码中给定函数名即可,函数名出现的任何位置,在代码执行时,都会被自动替换为函数代码。 函数生命周期,每次被调用时创建,返回时终止。自定义函数状态返回值用return,若遇到return此函数生命周期终止。
过程式编程:代码重用
模块化编程
结构化编程
语法1:function f_name{
。。函数体。。
}
语法二:f_name(){
函数体
}
函数返回值:
函数的执行结果返回值
使用echo或printf命令进行输出
函数体中调用命令的执行的结果
函数的退出状态码
默认取决于函数中执行的最后一条命令的退出码
自定义:return
函数可以接受参数
在函数体中,可以使用$!,$2。。。等引用传递给函数的参数,还可以函数中使用$*或$@引用所有参数
在调用函数时,在函数后面以空白符分割给定的参数列表即可,比如textfuntion arg1 arg2.。。
变量作用域: 是函数的生命周期在函数结束时自动销毁
局部变量:local name =name
本地变量:作用域是运行脚本的shell进程的生命周期,作用范围是当前shell脚本程序文件
函数递归:函数直接或间接调用自身
systemd的新特性
系统引导时实现服务并行启动; 按需激活进程; 系统状态快照; 基于依赖关系定义服务控制逻辑
核心概念: unit
unit由其相关配置文件进行标识,识别,和配置,文件中主要包含了系统服务,监听的socket,保存的快照以及其他与unit相关的信息,这些配置文件主要保存在/usr/lib/systemd/system /run/systemd/system /etc/systemd/system
unit 常见类型
service unit:文件扩展名为.service,用于定义启动服务,
Target unit:文件扩展名为.target,用于模拟实现运行级别
Device unit:device,用于定义内核识别的设备
monut unit:.mount 用于定义文件系统挂载点
socket unit:.socket 用于标识进程间通信用到的socket文件
snapshot unit :.snapshot管理系统快照
swap unit:.swap 用于标识swap设备
automount unit:.automount文件系统自动点挂载
path unit:.path用于定义文件系统的一些文件和目录
关键特性:
基于socket的激活机制,socket与程序分离
基于bus的激活机制
基于device的激活机制
基于path的激活机制
系统快照,保存各unit的当前状态信息于持久存储设备中
不兼容: systemctl的命令是固定不变的 非由systemd启动的服务无法与之同学
管理系统服务: service类型的unit文件
systemctl命令:systemctl 选项 服务名称 systemctl start/restart/stop/reload/status name.service
条件式重启:systemctl try-restart name.service
重载或重启服务:systemctl reload-or-restart name.service
查看某服务当前激活与否的状态: systemctl is-active name.service
参看所有已激活的服务状态: systemctl list-units --type service
查看所有服务(包括激活或未激活状态的)systemctl list-units -t service --all
设置服务开机自启/关闭:systemctl enable/disable name.service
查看某服务是否开机自启:chkconfig --list name -> systemctl is-enabled name.service
禁止某服务设定开机自启:systemctl mask name.service
取消禁止禁止某服务开机自启动:systemctl unmask name.service
查看服务的依赖关系: systemctl list-dependencles name.service
管理target units:
运行级别 0 ==> runlevel0.target poweroff.target
1 ==> runlevel1.target rescue.target (单用户模式)
2 ==> runlevel2.target multi-user.target
3 ==> runlevel3.target multi-user.target (命令行模式)
4 ==> runlevel4.target multi-user.target
5 ==> runlevel5.target graphlcal.target (桌面模式)
6 ==> runlevel6.target reboot.target
级别切换 init N ==> systemctl isolate name.target
查看当前运行级别:runlevel ==> systemctl list-units--type target
查看所有级别:systemctl list-units -t target -a
获取默认运行级别:systemctl get-default
修改默认运行级别:systemct set-default name.target
切换至紧急救援模式:systemctl rescue
切换至emergency模式:systemctl emergency
其他常用命令:快照:systemctl hibernate 快照并挂起:systemctl hybrld-sleep
selinux安全策略:secure enhanced Linux(法无授权不可为)
selinux有两种工作级别:
strict:每个进程都受到selinux的控制
targeted:仅有限个进程受到selinux的控制,只监控容易被入侵的进程
selinux的状态: enforcing: 强制,每个受限的进程都必然受限
permissive:启用,每个受限的进程违规操作不会被禁止,但会记录在审计日志中
disabled:关闭,
相关命令:getforce :获取seLinux当前状态 setenforce 0|1 临时设置permissive|enforcing 重启无效
配置文件 /etc/sysconfig/selinux /etc/selinux/config
给文件重新打标:chcon -t 还原之前的标签:restorecon