SHELL编程
1、shell编程的作用
自动化系统初始化(update,软件安装,时区统一设置,安全策略统一设置)
自动化批量软件部署程序(LAMP,LNMP,TOMCAT,LVS,BGINX等)
管理应用程序(KVM,集群管理扩容,MySQL的管理程序等)
日志分析处理程序(PV量,UV,200返回的数量,非200返回的情况等),其中常用的有 top 100,grep,awk等
编写自动化的备份/恢复程序(MySQL完全备份/增量备份)
自动化管理程序(批量远程修改密码,软件升级,配置更新)
自动化信息采集及监控程序(收集系统/应用的状态信息,CPU,MEM,DISK,NET,APACHE,TCP Status,MYSQL)
自动化扩容(增加云主机→业务上线)例如:zabbix监控CPU80%+python API增加云主机+shell脚本上线服务
配合ZABBIX信息采集
打印各种图形,通过键盘操控的小游戏等
相关算法的实现以及排序的实现
理论上讲,shell可以做任何事,一切取决于需求
注意:
shell语法难度可能只有java等的二十分之一,其中所用到的工具的各种指令只有各软件的管理命令
2、C JAVA PYTHON shell执行方式对比
一个简单的shell程序:
脚本中:
`#!/usr/bin/bash`代表了指定解析程序的脚本,声明解释器。不同的程序要使用不同的解释器去处理,且解释器只能在第一行
&>/dev/null:将命令的输出信息输出到NULL中,其中的
&
为混合输出,输出的是正确输出与错误输出;
表示的是排序&&
会表示逻辑判断,and,只有前一个命令的$?==0
,后面的命令才会执行||
表示或者的意思,如果不为真,那么||
后面的命令执行
.sh脚本执行方式:
各种程序的解释器:
其中,C语言的程序执行速度是最快的。
原因:
C语言进行编译后,会形成二进制机器码,可以被CPU直接执行
程序是由逻辑与数据组成的
shell程序是解释型执行,shell不需要事先编译的,执行时只是解释执行,使用bash解释,执行时才考虑其中的逻辑关系
C语言程序在执行时已经是编译好的,不需要考虑逻辑关系
JAVA编译后为字节码(中间码),只能被java的虚拟机JDK执行(TOMCAT,HADOOP)
python执行方式:
编译执行:编译为python的字节码,由python虚拟机执行
解释执行:
/usr/bin/python
,python最多使用的,是解释执行
编译性语言的缺点:灵活性较低 解释性语言可以直接修改源代码,然后直接执行,不需要编译
每个命令执行都有一个返回值,返回值是一个特殊的变量,变量是问号变量。%?
表示引用它的值
变量名 | 含义 | 作用 |
$? | 问号变量 | 返回上一条命令的执行结果,0为正常,127为错误 |
3、bash中调用python expect
其中:
/usr/bin/bash <<-EOF XXX EOF
(EXPECT):将中间XXX的代码传递给python执行,即将代码重定向给python执行。同时,也可以在其中继续重定向其他代码其中,后面的EOF需要顶头,且EOF只是人们比较习惯的方式
可在EXPECT中传递BASH代码执行,只有BASH中才能识别EOF的结构
示例程序如下:
程序执行结果不同的原因:
上面的方式是子shell页面执行
下面的是在当前的shell中执行
大部分的程序都是在子shell中执行的
若要定义变量的东西在当前shell中生效,可用当前shell执行
示例:重定义/root/.bashrc
文件
4、shell特性
1、shell是什么
命令解释器,能在shell下运行的命令就是shell命令
2、Linux支持的shell
查看对shell有影响的文件:
su命令的区别:
3、GNU/bash shell 特点
1、命令和文件自动补齐:作用,可提高效率
2、命令历史记忆功能
1、上下键
3、别名功能
4、快捷键
5、前后台控制作业
符号 | 用法 | 详情 |
& | sleep 10 & | 使得进程在后台运行,即使退出终端,依然运行 |
nohup | nohup sleep 10 & | 使得进程在后台运行,即使退出终端,依然运行 |
screen | screen -s | 命名会话 |
Ctrl+C | 杀掉前台进程 | |
Ctrl+Z | 杀掉后台进程 | |
jobs | 查看后台进程 | |
bg | 让进程在后台工作 | |
fg | 让进程在前台工作,可与 Ctrl+Z 一起用 | |
kill %3 kill 3 | (当前会话中作业号为3) (给PID为3的进程发信号) |
6、输入输出重定向
7、管道
管道的作用:将一个命令的输出当做下一段的输入
8、命令排序
; 不具备逻辑
9、10、11、12、13、14、15、16、17、18、
4、5、6、7、8、9、10、
5、
6、
7、
8、
9、
10、
11、
12、
13、
14、
15、
16、
17、
18、
19、
20、
21、
22、
23、
24、
25、
26、
27、
28、
29、
30、
最后更新于