- Shell基本概述
- 开发语言中程序代码的分类
-曾老湿, 江湖人称曾老大。
-多年互联网运维工作经验,曾负责过大规模集群架构自动化运维管理工作。 -擅长Web集群架构与自动化运维,曾负责国内某大型金融公司运维工作。 -devops项目经理兼DBA。 -开发过一套自动化运维平台(功能如下): 1)整合了各个公有云API,自主创建云主机。 2)ELK自动化收集日志功能。 3)Saltstack自动化运维统一配置管理工具。 4)Git、Jenkins自动化代码上线及自动化测试平台。 5)堡垒机,连接Linux、Windows平台及日志审计。 6)SQL执行及审批流程。 7)慢查询日志分析web界面。
Shell基本概述
为什么要使用shell? |
---|
1.安装操作系统(CentOS)自动化安装操作系统(kickstart cobbler)底层shell
2.初始化/优化操作系统 1)ntp时间同步 2)更改默认yum源 3)ssh优化 4)关闭Selinux 5)关闭/开启 防火墙(C6:iptables C7:firewalld) 6)安装基础服务(wget vim lrzsz net-tools unzip gzip...) 7)优化文件描述符 8)优化字符集 9)...
3.安装服务 1)Nginx 2)PHP 3)MySQL 4)Redis 5)MHA 6)Rsync 7)NFS 8)MongoDB 9)Zabbix ... 4.启动服务(系统默认的shell脚本)
5.脚本实现自动化代码上线
6.监控服务(使用shell)
7.结合定时任务使用shell
8.重复性工作写入脚本 1)日志切割 2)日志分析 3)数据统计 4)机器巡检 5)数据备份 ...
shell编程和基础知识 |
---|
1)熟练使用vim编辑器 2)熟悉ssh终端(Xshell、CRT) 3)熟练掌握linux常用命令 4)熟练掌握linux正则表达式及三剑客命令
如何学好shell编程 |
---|
1.环境变量 2.条件表达式 3.流程控制语句 4.循环 5.数组 6.函数
学习shell三部曲: 先读懂shell 再修改shell 自己写shell
找一本合适的教材、或者自己认真做的较为全面的笔记 大忌:不可拿来主义,可以模仿,但是要自己嚼烂了在吃下 学完shell 可解决企业中大部分脚本问题
什么是shell |
---|

1.交互式shell 交互式模式就是shell等待你的输入,并且执行你提交的命令。这种模式被称作交互式是因为shell与用户进行交互。这种模式也是大多数用户非常熟悉的:登录、执行一些命令、签退。当你签退后,shell也终止了。
2.非交互式shell shell也可以运行在另外一种模式:非交互式模式。在这种模式下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。当它读到文件的结尾,shell也就终止了。
什么是shell脚本 |
---|
把在命令行执行的命令放在一个文件里统一执行,称为Shell脚本 包含若干个linux命令、循环语句,条件语句等。
shell脚本规范 |
---|
1.目录统一 2.shell脚本的结尾要以.sh结尾 3.脚本的开头需要有解释器
代码语言:javascript复制#!/bin/bash
4.脚本中需要有作者信息
代码语言:javascript复制#!/bin/bash
#Author: _DriverZeng_
#Date: _1999-12-21_
#Name: _Print Message_
5.必须要加注释(开发规范,运维规范...) 6.shell中的文字尽量使用英文 7.成对的符号和语句一次性书写完
此处介绍一个vim模板 |
---|
# 1.首先先编辑一个模板文件,该模板文件可以叫任何名字
[root@zabbix01 ~]# vim /usr/share/vim/vimfiles/template.zls
#!/bin/bash
#Author: _DriverZeng_
#Date: _1999-12-21_
#Name: _Print Message_
# 2.写完之后,我们需要修改一下vim的配置文件
[root@zabbix01 ~]# vim /etc/vimrc
autocmd BufNewFile *.spec 0r /usr/share/vim/vimfiles/template.spec
## 在第28行,autocmd自动保存模板文件,修改一下,因为我们是要写shell脚本的模板
## 所以我们要把*.spec 修改成*.sh
## 然后将后面的模板文件改成你定义的模板文件名
autocmd BufNewFile *.sh 0r /usr/share/vim/vimfiles/template.zls
# 3.接下来,我们编辑所有只要以sh结尾的文件,都会带有作者信息
[root@zabbix01 ~]# vim test_zls.sh
脚本的执行方式 |
---|
[root@m01 ~]# vim test.sh
#!/bin/bash
#Author: _DriverZeng_
#Date: _1999-12-21_
#Name: _Print Message_
echo 'Hello World'
#执行脚本
[root@m01 ~]# sh test.sh
Hello World
[root@m01 ~]# bash test.sh
Hello World
[root@m01 ~]# ./test.sh
Hello World
[root@m01 ~]# /root/test.sh
Hello World
[root@m01 ~]# . test.sh
Hello World
[root@m01 ~]# source test.sh
Hello World
.
和 source
都是在父shell下执行的
sh
, bash
, 相对路径
, 绝对路径
都是在子shell下执行的
开发语言中程序代码的分类
编译型 |
---|
写完后,需要编译才能运行。开发书写的代码,无法直接运行,需要编译(Java、C语言、等)
代码语言:javascript复制# 编辑代码
[root@m01 ~]# vim hello.c
#include <stdio.h>
void main(){
printf("hello world");
}
#编译成二进制文件
[root@m01 ~]# gcc hello.c -o hello.bin
[root@m01 ~]# ll
总用量 16
-rwxr-xr-x 1 root root 8440 8月 26 09:40 hello.bin
-rw-r--r-- 1 root root 60 8月 26 09:39 hello.c
[root@m01 ~]# file hello.bin
hello.bin: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=c248ed9f695c05ece7d46731556e86eb0ac6bc11, not stripped
[root@m01 ~]# ./hello.bin
hello world

解释型 |
---|
书写完成,通过命令解释器运行。书写完成后,使用对应的命令解释器(shell、python、等)
代码语言:javascript复制[root@m01 ~]# vim hello.sh
[root@m01 ~]# cat hello.sh
#!/bin/bash
echo 'hello world'
[root@m01 ~]# ll
总用量 20
-rwxr-xr-x 1 root root 8440 8月 26 09:40 hello.bin
-rw-r--r-- 1 root root 60 8月 26 09:39 hello.c
-rw-r--r-- 1 root root 31 8月 26 09:44 hello.sh
[root@m01 ~]# file hello.sh
hello.sh: Bourne-Again shell script, ASCII text executable
[root@m01 ~]# sh hello.sh
hello world