shell的介绍
- 什么是shell
- shell是一种命令解释器,而linux的shell则是用来保护内核的,或者和内核进行交互的
- Python脚本首行的#!/bin/python其实就是指定了Python脚本运行的时候使用的解释器
- shell的分类
- 窗口式的shell
- Windows的桌面
- 各个发行版的linux的桌面
- 命令行shell
- windows cmd(命令行提示符)
- linux sh … … bash
- linux查看默认shell解释器的方法 echo $SHELL
- 常见的linux发行版本
- ubuntu 界面化操作比较方便
- centos 6.5-6.7
- redhat 收费
- debain
- kali 渗透测试
shell命令与shell脚本的介绍
- shell命令
- 什么是shell命令
- 一条命令,包括shell自身的命令以及linux系统命令
- 特点:
- 逐行输入,逐行输出
- 无法重复使用
- shell脚本
- 什么是shell命令脚本
- 一堆shell命令的组合
- 特点:
- 一次输入,逐行执行
- 脚本可以重复使用,提高工作效率
- shell脚本的规范
- 命名
- 命名要有意义,最好能够表明脚本功能
- 后缀一般以.sh结尾
- 首行是并且必须是命令解释器
- 默认首行使用 #!/bin/bash
- 特殊情况可以根据环境修改
- 版权信息
- 首行之下必须使用注释写明脚本的基本信息
- 脚本名,功能,编写时间,编写人,联系方式等
- 脚本的执行顺序
- 根据脚本编写顺序,从上到下依次执行
- 成对编写
- () [] {} “” ’’
- shell执行方式
- 使用命令解释器加载脚本文件
- 执行方式
- bash 脚本文件
- 使用场景:
- 生产常用
- 使用脚本的绝对路径或相对路径执行
- 执行方式
- 直接用./文件路径执行脚本文件
- 当在脚本所在目录的时候,使用相对路径要加 ./脚本文件名
- 使用条件条件:
- 脚本有用可执行权限
- 脚本首行选定了解释器
- 使用场景:
- 私下
- source或.的形式
- 执行方式
- source 或 . 脚本文件 将脚本中的变量都导入到当前的环境
- 作用
- 加载文件,将写在文件中的配置信息马上生效
- 使用场景:
- 保证环境变量的一致性
- 运行方式
- 让shell脚本在后台运行
- & 运行shell脚本的时候在后面加上&,代表以后台运行的方式
- 运行的输出
- 1> 指标准信息输出路径(也就是默认的输出方式)
- 2> 指错误信息输出路径
- 2>&1 指将标准信息输出路径指定为错误信息输出路径(也就是都输出在一起)
- 习惯上
- 标准输入(standard input)的文件描述符是 0
- 标准输出(standard output)是 1
- 标准错误(standard error)是 2
shell变量
- shell的变量介绍
- 变量包括两部分: (变量名就是存放变量值的容器,容器不变,但是存放的内容可变)
- 变量名 不变
- 变量值 变化
- shell中变量的统一格式
- 基本格式:
- 变量名=变量值
- 注意:
- 等号左右两边没有空格
- shell中的变量的分类
- 本地变量
- 全局变量
- 内置变量
- 本地变量
- 本地变量定义
- 在当前的shell或者当前脚本存续期间可用的变量
- 数据变量的定义方式(三种)
- 变量名=变量值
- 变量值必须是连续的,不能有空格,不能有特殊字符
- 变量名=‘变量值’
- 变量值可以是不连续的,能有空格,特殊字符原样,引号中的是什么就是什么
- 变量名="变量值"
- 值可以不连续,如果值中使用已定义变量,则会先调用,再赋值
- 命令变量的定义
- 定义方式
- 变量名=`命令` 注意命令两边的符号
- 变量名=$(命令)
- 执行顺序:
- 先运行命令,将命令执行的结果赋值给变量名
- 全局变量
- 什么是全局变量
- 系统所有环境都可以使用的变量
- 查看全局变量方法
- env命令
- 定义方法
- 分步的方式
- 变量名=变量值 (定义一个本地变量,可以是数据或者是命令)
- export 变量名 (声明为全局变量)
- 同时定义
- export 变量名=变量值 (变量可以是数据或者是命令)
- 内置变量
- 什么是内置变量
- ash命令内部已经定义好的变量,可以直接使用,不需要定义
- 使用方法
- 和shell脚本有关的内置变量
- $0 获取当前脚本文件名称
- $# 获取当前脚本获取的参数的个数
- $n 获取当前脚本获取到的第n个参数
- $? 获取上一条命令的执行情况,0表示成功,1表示失败,127表示找不到命令
- $$ 脚本运行时使用的进程号
- $@ 获取所有的参数
- 获取hash序列
- $RANDOM 获取随机的5为随机数
- $RANDOM | md5sum(有的bash是md5) 将变量进行md5序列化
- 返回的是一个序列化的字符串和一个 - 符号
- \$RANDOM | md5sum | awk '{printf $1}' 将awk接收到的第一个参数打印出来(即序列化结果)
- 和字符串相关的内置变量
- 截取
- 使用方法
- ${var_name:start:n}
- 备注
- var_name是字符串变量名
- start表示的截取的起始位置
- start整数 从开头开始
- start:n 为 0-n 从结尾往前推n个位开始
- n 表示截取字符的个数
- 和默认值相关的内置变量
- 第一种
- var_name=$1
- ${var_name:-default}
- default表示默认值,如果没有输入参数,default将会被使用
- 第二种
- var_name=$1
- ${var_name:+default}
- 将会无视输入参数,直接输出设定好的默认值
- 查看变量的方式
- $变量名
- 使用场景: 私下使用时
- "$变量名"
- 使用场景: 调用变量时
- "${变量名}" 标准的使用方法
- 用场景: 脚本中,规范化作业时
- 变量的运算
- shell中变量运算方法
- 1.使用let进行运算
- let n=n+1
- let n+=1 实现自加
- 2.使用$(())实现运算
- n=\$(($n+1))
- 变量的其他操作
- 将一个本地变量设置为只读,不允许删除变量,关闭终端才能删除
- readonly 变量名
- 删除变量
- unset 变量名