1. shell的基本语法结构。如:变量定义、条件判断、循环语句(for , until , while)、分支语句、函数和数组等
  2. 基本正则表达式;
  3. 文件处理三剑客:grep , sed , awk 工具的使用;
  4. 使用shell脚本完成一些较复杂的任务,如:服务搭建,批量处理等。

    说明:以上内容仅仅是基本要求,还有很多更深更难的语法需要扩充学习。
    本节目标

  • 数量掌握shell变量的定义和获取(重点)
  • 能够进行shell简单的四则运算

    一、SHELL介绍

    1、编程语言分类

    image.png

    2、shell简介

    3、shell脚本

    1、什么是shell脚本

  • 一句话概述

简单来说就是将 需要执行的命令保存到文本中,按照顺序执行。它是解释型的,意味着不需要编译。

  • 准确叙述

若干命令+脚本基本格式+脚本特定语法+思想=shell脚本

2、什么时候用到脚本

重复化、复杂化的工作,通过把工作的命令写成脚本,以后仅仅需要执行脚本就能完成这些工作。

3、shell脚本能干啥

1、自动化部署软件 LAMP\LNMP\Tomcat
2、自动化管理 系统初始化脚本、批量修改主机密码、推送公钥
3、自动化分析处理 统计网站访问量
4、自动化备份 数据库备份、日志转储
5、自动化监控脚本

4、如何学习shell脚本

1、尽可能记忆更多命令(记忆命令使用功能和场景)
2、掌握脚本的标准的格式(指定魔法字节、使用标准的执行方式运行脚本)
3、必须熟悉掌握脚本的基本语法(重点)

5、学习shell脚本的秘诀

多看(看懂)—->模仿(多练习)—->多思考(多写)

6、shell脚本的基本写法

1、脚本第一行,魔法字符 #! 指定解释器 【必写】
#! /bin/bash 表示以下内容使用bash解释器解析
注意
如果直接将解释器路径写死在脚本里,可能在某些系统就会存在找不到解释器的兼容性问题,所以可以使用:#!/bin/env 解释器
2、脚本第二部分, 注释号( # 号)说明,对脚本的基本信息进行描述【可选】

  1. #!/bin/env
  2. # 以下内容是对脚本的基本信息的描述
  3. # name : 名字
  4. # desc : 描述describe
  5. # path : 存放路径
  6. # useage : 用法
  7. # update : 更新时间
  8. # 下面就是脚本的具体内容
  9. commands
  10. ……

3、脚本第三部分,脚本要实现的具体代码内容

7、shell脚本的执行方法

  • 标准脚本执行方法(建议) ```powershell vim /shell/first_shell.sh

chmod +x first_shll.sh

绝对路径

/shell/first_shell.sh

相对路径

cd /shell ./first_shell


- 非标准的执行方法 (不建议)

1、直接在命令行指定解释器执行
```powershell
-x : 一般用于排错,查看脚本的执行过程
-n : 用来查看脚本的语法是否有问题

2、使用 source 命令读取脚本文件,执行文件里的代码。

source /shell/first_shell.sh
  • eg:

    #!/bin/env bash
    # 打印"报告首长,任务于2020年-08-17 23:10:00时间完成"
    echo "报告首长,任务于$(date +'%F %T')"
    

    二、变量的定义

    1、变量是什么?

    一句话概括:变量是用来临时保存数据的,该数据是可以变化的数据。

    2、什么时候需要定义变量

  • 如果某个内容需要多次使用,并且在代码中重复出现 ,那么可以用变量代表该内容。这样在修改内容的时候,仅仅需要修改变量的值。

  • 在代码运行的过程中,可能会把某些命令的执行结果保存起来,后续代码需要使用这些结果,就可以直接使用这个变量。

    3、变量如何定义?

变量名=变量值 (等号两边不可以有空格)
变量名: 用来临时保存数据的
变量值: 就是临时的可变化的数据
image.png

4、变量的定义规则

  • 变量名区分大小写
  • 变量名不能有特殊符号 。特别说明:对于有空格的字符串赋值时,要用引号引起来。
  • 变量名不能以数字开头
  • 等号两边不能有任何空格
  • 变量名尽量做到见名知意。一般变量名使用大写(小写也可以)

    5、变量的定义方式有哪些?

    1、基本方式

    直接赋值给一个变量

image.png

2、命令执行结果赋值给变量

image.png

3、交互式定义变量(read)*

目的:让用户自己给变量赋值,比较灵活
语法read [选项] 变量名
常见选项

选项 释义
-p 定义提示用户的信息
-n 定义字符数(限制变量值的长度)
-s 不显示(不显示用户输入的内容)
-t 定义超时时间,默认单位为秒(限制用户输入变量值的超时时间)

举例说明:
image.png

4、定义有类型的变量(declare)

目的:给变量做一些限制,固定变量的类型,比如: 整型、只读
用法declare 选项 变量名=变量值
常用选项

选项 释义 举例
-i 将变量看成整数 declare -i A=123
-r 定义只读 declare -r B=hello
-a 定义普通数组;查看普通数组
-A 定义关联数据;查看关联数组
-x 将变量通过环境导出 declare -x AAA=123456 等于 export AAA=123456

6、变量的分类

1、本地变量

  • 本地变量:当前用户自定义的变量。当前进程中有效,其他进程及当前进程的子进程无效。

    2、环境变量

  • 环境变量:当前进程有效,并且能够被子进程调用。

    • env 查看当前用户的环境变量
    • set 查询当前用户的所有变量(临时变量与环境变量)
    • export 变量名=变量值 或者 变量名=变量值;export 变量名

      3、全局变量

  • 全局变量 :全局所有的用户和程序都能调用,且继承,新建的用户也能默认调用。

  • 相关配置文件介绍: | 文件名 | 说明 | 备注 | | —- | —- | —- | | $HOME/.bashrc | 当前用户的bash信息,用户登录时读取 | 定义别名,umask,函数等 | | $HOME/.bash_profile | 当前用户的环境变量,用户登录时读取 | | | $HOME/.bash_logout | 当前用户退出当前shell时最后读取 | 定义用户退出时执行的程序等 | | /etc/bashrc | 全局的bash信息,所有用户都生效 | | | /etc/profile | 全局环境变量信息 | 系统和所有用户都生效 |

说明: 以上文件修改后,都需要重新 source 让其生效或者退出重新登录。

  • 用户登录系统读取相关文件的顺序

    • 1、/etc/profile
    • 2、$HOME/.bash_profile
    • 3、$HOME/.bashrc
    • 4、/etc/bashrc
    • 5、$HOME/.bash_logout

      4、系统变量

  • 系统变量(内置bash中变量):shell本身已经固定好了它的名字和作用。 | 内置变量 | 含义 | | —- | —- | | $? | 上一条命令执行后返回的状态;状态值为0表示执行正常,非0表示执行异常或错误。 | | $0 | 当前执行的程序或脚本名称 | | $# | 脚本后面接的参数个数 | | $* | 脚本后面的所有参数,参数当成一个整体输出,每一个变量参数之间以空格隔开 | | $@ | 脚本后面的所有参数,参数是独立的,也是全部输出 | | $1~$9 | 脚本后面的位置参数,$1表示第一个位置参数,以此类推 | | ${10}~${n} | 扩展位置参数,第10个位置变量必须使用{}大括号括起来(两位数以上扩起来) | | | 当前所在进程的进程号,如:echo | | $! | 后台运行的最后一个进程号(当前终端) | | !$ | 调用最后一条命令历史中的参数 |

三、简单的四则运算

算数运算:默认情况下,shell就只能支持简单的整数运算
运算内容:加(+) 、 减(-) 、 乘(*) 、 除(/) 、 求余数(%)

1、四则运算符号

表达式 举例
$(( )) echo $((1+2))
$[ ] echo $[5-2]
expr expr 10/5
let n=1;let n+=1 等价于 let n=n+1
  • 补充:求次幂用 ,例:`echo $[26]` , $(()),$[],let 可以使用这种方法。
  • 如果需要计算小数则需要借助工具 bc ,例:echo $[2*2.5] | bc

    2、i++ 与 ++i 的区别

    i++ 是先赋值,再运算
    ++i 是先运算,再赋值