初始shell脚本
Shell脚本的概念
将要执行的命令按顺序保存到一个文本文件
给该文件可执行权限
可结合各种Shell控制语句以完成更复杂的操作
Shell脚本的应用场景
重复性操作
交互性任务
批量事务处理
服务运行状态监控
定时任务执行
Shell的作用 — 命令解释器,充当“翻译官”
介于系统内核与用户之间,负责解释命令行,Shell (壳程序)是一个特殊的应用程序,它介于操作系统内核与用户之间,充当了一个“命令解释器"的角色,负责接收用户输入的操作指令(命令)并进行解释,将需要执行的操作传递给内核执行,并输出执行结果。
编写脚本代码
使用vi或者vim编辑器,一般都是使用vim编辑器
每行一条Linux命令,按执行顺序一次编写
shell脚本的构成
脚本申明(解释器) :若第一行为“#!/bin/bash", 表示此行以下的代码语句是通过/bin/bash程序来解释执行,#!/bin/bash为默认解释器。还有其它类型的解释器,比如#!/usr/bin/python、#!/usr/bin/ expect
注释信息:以“#”开头的语句表示为注释信息,被注释的语句在运行脚本时不会被执行。(shell脚本文件的第一行是个例外,#后面的感叹号会告诉shell用哪个shell来运行脚本)
可执行语句:比如echo命令,用于输出" "之间的字符串。
shell脚本的执行
指定路径去执行文件,文件需要有执行权限。
chmod +x AAA.sh
绝对路径:/root/mzs/AAA.sh
相对路径:./AAA.sh
指定解释器去执行(bash 脚本名),不需要执行权限。
bash 脚本路径
sh 脚本路径
source 脚本路径(source可以用 . 代替)
source命令是一个内置的shell命令,用于从当前shell会话中的文件读取和执行命令。source命令通常用于保留、更改当前shell中的环境变量。简而言之,source一个脚本,将会在当前shell中运行execute命令。
sh,bash、绝对路径、相对路径 执行脚本时,会创建一个子shell环境,并在这个子shell环境中执行脚本。
source和 . 执行脚本时,会在当前shell环境中执行脚本
错误调试
- 命令错误: 命令错误不会影响接下来的命令,之后的命令会继续执行。
- 语法错误: 会导致后续的命令不执行。造成脚本中一部分命令已执行,一部分未执行。
- 逻辑错误: 执行后的效果不是自己想要的。需要自己去排查
bash -n 脚本名称 //只检查语法错误,不真正执行脚本。定位的错误行可能不准确。
bash -x 脚本名称 //显示每个命令的执行过程,方便发现逻辑错误
重定向与管道操作
交互式硬件设备
标准输入:从该设备接收用户输入的数据 /dev/stdin 0
标准输出:通过该设备向用户输出数据 /dev/stdout 1
标准错误:通过该设备报告执行出错信息 /dev/stderr 2
重定向操作
类型 | 操作符 | 用途 |
重定向输入 | < | 从指定的文件读取数据,而不是从键盘输入 |
重定向输出 | > | 将输出结果保存到指定的文件(覆盖原有内容) |
重定向追加 | >> | 将输出结果追加到指定的文件尾部 |
标准错误输出 | 2> | 将错误信息保存到指定的文件(覆盖原有内容) |
标准错误追加 | 2>> | 将错误信息追加到指定的文件中 |
混合输出 | &> | 将错误输出、标准错误的内容保存到同一个文件中 |
管道符
x1 | x2 链接多个命令,把命令x1的结果作为命令x2的操作对象
如果管道符合右边是一定需要执行对象的命令,则管道符号 后面要有 xargs 命令来传递执行参数 (x1 | xargs x2)
shell变量
自定义变量
sheLl脚本给变量赋值的方式
变量名=变量值
例:name=1
查看变量的值:
echo &变量名
unset可以取消变量 例 :unset name
赋值时使用引号
双引号" ":会把引号的内容当成整体来看待。强引用,识别变量,允许通过$符号引用其他变量值。
单引号' ':会把引号的内容当成整体来看待。弱引用,禁止引用其他变量值,单引号内的内容都会被认为是普通字符。
反撇号` ` 和 $() :调用命令执行后输出的结果。如果存在嵌套,不能使用反撇号。
花括号{ } :定义变量范围。 echo <span class="katex"><span class="katex-mathml">color{color}<span class="katex-html"><span class="base"><span class="strut"><span class="mord"><span class="mord mathnormal">c<span class="mord mathnormal">o<span class="mord mathnormal">l<span class="mord mathnormal">o<span class="mord mathnormal">r{price}
特殊的shell变量
环境变量
由系统提前创建,用来设置用户的工作环境
配置文件:/etc/profile(全局生效)、~/.bash_profile(当前用户环境)
常见环境变量
env PATH HOME PWD USER
使用 env 命令可以查看到当前工作环境下的环境变量
变量USER表示用户名称,
HOME表示用户的宿主目录,
LANG表示语言和字符集,
PWD表示当前所在的工作目录,
变量PATH表示可执行程序的默认搜索路径
预定义变量
$#:表示命令行中位置参数的个数,传递到脚本的参数个数
@:与@:与@:与*相同,@以"@以"@以"1" “2 " … " 2" … "2"…"n” 的形式输出所有参数
$?:显示上一条命令的退出状态;0表示没有错误,其他任何值表明有错误
$0:脚本本身
日期
date +%F显示现在日期
date +%Y -%m-%d 年月日
date +%T 显示时间 HMS几点几分几秒
-%H 为小时
%w 周几
date -d “-1day” 一天之前
date -d “1day” 一天之后