01.Shell脚本概述

徐亮伟, 江湖人称标杆徐。多年互联网运维工作经验,曾负责过大规模集群架构自动化运维管理工作。擅长Web集群架构与自动化运维,曾负责国内某大型电商运维工作。
个人博客"徐亮伟架构师之路"累计受益数万人。
笔者Q:552408925、572891887
架构师群:471443208

  • 1.shell基本特性
  • 2.shell变量定义
  • 3.shell条件测试
  • 4.shell数值运算
  • 5.shell流程控制if case
  • 6.shell循环语句for while
  • 7.shell数组函数array function
  • 8.shell内置命令break continue exit
  • 9.shell轻量项目

2.Shell脚本是什么

1.系统命令的堆积
2.特定的格式 + 特定的语法 + 系统的命令 = 文件
3.不会手动搭建或者执行某些程序,那么一定学不会Shell

1.Shell脚本的功能

Shell脚本做什么: 基于标准化之上的 -> 工具化
Shell脚本的作用: 简化操作步骤, 提高效率,减少人为干预,减少系统故障

  • 1.自动化的完成基础配置: (系统初始化操作、系统更新、内核调整、网络、时区、SSH优化)
  • 2.自动化安装程序: 自动化安装LNMP、LAMP、MySQL、Nginx、Redis
  • 3.自动化调整配置文件Nginx Conf、MySQL Conf
  • 4.自动化部署业务: 部署php、java秒级回退
  • 5.自动化定期备份恢复程序: (MySQL全备+增量+binlog + crond + Shell脚本)
  • 6.自动化信息的采集Zabbix + Shell: 硬件、系统、服务、网络、等等
  • 7.自动化日志分析: 取值->排序->去重->统计->分析
  • 8.自动化扩容/缩容zabbix + shell
    • 扩容: 监控服务器cpu, 如cpu负载持续80% + 触发动作(脚本)
    • 脚本: 调用api开通云主机->初始化环境->加入集群->对外提供
    • 缩容: 监控服务器cpu使用率20%->判断有多少web节点->判断是否超过预设->缩减到对应的预设状态->变更负载的配置
  • 9.Shell什么都能做, 但要符合实际情况以及实际业务需求

3.Shell脚本的执行

1.脚本的基本格式

shell> vim /tmp/test
#!/bin/bash
echo "Hello world"

运行脚本
# chmod 755 /tmp/test
# /tmp/test

2.脚本的执行方式

1.直接使用bash解析器执行脚本
# bash /tmp/test

2.给脚本添加执行权限,然后使用./运行
# chmod 755 /tmp/test
# ./tmp/test
没有执行权限会提示权限不足

3.Shell脚本的特性

bash shell特性

1.命令补全和文件路径补全, 如果写错无法补全   table
2.命令历史记忆功能history
3.别名功能alias、unalias
4.常用快捷键ctrl+u,k,a,e,l,c,z,d,w,r,y
5.前后台作业控制bg,fg,jobs,screen
6.输入输出重定向 >,>>,1>,2>>,&>,cat <
7.管道 |将前者命令的标准输出交给后者命令的输入 tee 
8.命令排序
    ;   没有逻辑关系,无论分号前面的命令执行是否成功都执行后者命令
    &&  前面执行成功, 则执行后者
    ||  前面执行不成功, 则执行后者
9.shell 通配符
    * 匹配任意多个字符
    ? 匹配任意一个字符
    [] 匹配括号中任意一个字符a-z,0-9,A-Z,a-Z
    () 在子 shell 中执行(cd /boot;ls) (umask 077; touch file1000) 
    {} 集合 touch file{1..9}
    \ 转义符
10.echo输出颜色、printf 格式化输出文本
[root@Shell ~]# echo -e "\033[30m 黑色字 \033[0m"
[root@Shell ~]# echo -e "\033[31m 红色字 \033[0m"
[root@Shell ~]# echo -e "\033[32m 绿色字 \033[0m"
[root@Shell ~]# echo -e "\033[33m 黄色字 \033[0m"
[root@Shell ~]# echo -e "\033[34m 蓝色字 \033[0m"
[root@Shell ~]# echo -e "\033[35m 紫色字 \033[0m" 
[root@Shell ~]# echo -e "\033[36m 天蓝字 \033[0m"
[root@Shell ~]# echo -e "\033[37m 白色字 \033[0m"