01·Shell编程基础入门

2022-09-26 10:44:44 浏览数 (1)

  • 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模板

代码语言:javascript复制
# 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

脚本的执行方式

代码语言:javascript复制
[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下执行的 shbash相对路径绝对路径都是在子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

0 人点赞