目录
一、Shell脚本概述
linux中包含shell的文件有
1、shell脚本的概述
- 将要执行的命令按顺序保存到一个文本文件
- 给该文件可执行权限
- 可结合各种Shell控制语句以完成更复杂的操作
编程语言类型
编译型 :C C++ JAVA GO 代码文件需要先编译后,程序才能执行
解释型 :SHELL PYTHON 代码是边解释边运行
2、Shell脚本应用场景
- 重复性操作
- 交互性操作
- 批量事物操作
- 服务运行状态监控
- 定时任务执行
- .........
3、Shell的作用
(1)Shell的作用——命令解释器,“翻译官”
- 介于系统内核与用户之间,负责解释命令行
shell脚本功能:完成自动化运维工作,批量完成重复操作,结合crontab完成周期性任务
(2)用户的登录Shell
- 登录后默认使用的Shell程序,一般为/bin/bash
- 不同Shell的内部指令、运行环境等会有所区别
4、编写第一个Shell脚本
(1)编写脚本代码
- 使用vim文本编辑器
- 每一行Linux命令,按执行顺序依次编写
注:Shell脚本的编写
vim XXX.sh
1)申明解释器
#!/bin/bash #!/bin/python
2)编写注释信息
要以 # 号开头表示为注释,被注释的语句在脚本运行时是不会被执行的
3)编写执行语句
按照顺序编写要执行的命令语句
(2)赋予可执行权限
- 使脚本具有可执行属性
Shell脚本的运行
1)bash 或 sh 指定脚本文件运行,可无执行权限
绝对路径 或 相对路径 指定脚本文件运行,要求有执行权限
以上两种方式 都是在子shell环境中执行脚本
2)source 或 . 指定脚本文件运行,可无执行权限
会在当前shell环境中执行脚本
5、重定向与管道操作
(1)交互式硬件设备
- 标准输出:从该设备接收用户输入的数据
- 标准输出:通过该设备向用户输出数据
- 标准错误:通过该设备报告执行出错信息
类型 | 设备文件 | 文件描述编号 | 默认设备 |
标准输入 | /bev/sbin | 0 | 键盘 |
标准输出 | /dev/stdout | 1 | 显示器 |
标准错误输出 | /dev/stder | 3 | 显示器 |
(2)重定向操作
类型 | 操作符 | 用途 |
重定向输入 | < | 从指定的文件读取数据,而不是从键盘输入 |
重定向输出 | > | 将输出结果保存到指定的文件(覆盖原有内容) |
>> | 将输出结果追加到指定的文件尾部 | |
重定向错误输出 | 2> | 将错误信息追加到指定文件(覆盖原有内容) |
2>> | 将错误信息追加到指定的文件中 | |
混合输出 | &> | 将标准输出、标准错误的内容保存到同一文件中 |
(3)管道操作符号“|”
- 将左侧的命令输出结果,作为右侧命令的处理对象
重定向符号
< 重定向输入,从文件读取数据
> 重定向输出,将正常输出的数据信息保存到文件,并覆盖原文件内容
>> 重定向追加,将正常输出的数据信息追加保存到文件末尾
2> 重定向错误输出,将错误输出的数据信息保存到文件,并覆盖原文件内容
2>> 重定向错误追加,将错误输出的数据信息追加保存到文件末尾
&> >& 混合输出,将正常和错误输出的数据信息都保存到文件,并覆盖原文件内容
&>> 混合追加,将正常和错误输出的数据信息都追加保存到文件末尾
命令 > 文件 2>&1 效果等效于混合输出
ls -lh 标准输出 到屏幕 1 --> 屏幕
ls -lh > test.txt 重定向输出 到 test.txt 1 --> test.txt
2>&1 错误输出 重定向到 标准输出 2 --> 1
二、Shell脚本变量
1、Shell变量的作用、类型
(1)变量的作用
- 用来存放系统和用户需要使用的特定参数(值)
- 变量名:使用固定的名称,由系统预设或用户定义
- 变量值:能够根据用户设置、系统环境的变化而变化
(2)变量的类型
- 自定义变量:由用户自己定义、修改和使用
- 特殊变量:环境变量,只读变量,位置变量,预定变量
2、自定义变量
(1)自定义一个新的变量
- 变量名以字母或下划线开头,区分大小写,建议全大写
(2)查看变量的值
定义变量:
1)变量名=变量值
变量名只能用 _ A-Z a-z 开头
2)read -p "提示内容" 变量名 #从键盘输入中获取变量值
(3)赋值时使用引号
- 双引号:允许通过$符号引用其他变量值
- 单引号:禁止使用其他变量值,$视为普通字符
- 反撇号:命令替换,提取命令执行后的输出结果
引号的作用
"$XXX" 会把$看作为引用XXX变量值的特殊符号
'$XXX' 会把$看作为一个普通字符,不会引用变量的值
`...` $(...) 提取里面的命令执行后的结果
(4)从键盘输入内容为变量赋值
(5)设置变量的作用范围
变量的作用范围
默认情况下自定义的变量只能在当前shell环境中有效
让自定义的变量在所有shell环境中有效的方法:
1)在 /etc/profile 文件中定义 export 变量名=变量值
source /etc/profile 立即生效 或 重新登录系统自动生效
2)在 /etc/bashrc 文件中定义 变量名=变量值
切换 shell 环境自动生效
(6)整数变量的运算
(7)常用运算符
- 加法运算:+
- 减法运算:-
- 乘法运算:\*
- 除法运算:/
- 求模(取余)运算:%
整数运算
echo $(expr 整数1 运算符 整数2) $(expr $变量1 运算符 $变量2) + - \* / %
echo $[整数1 运算符 整数2] $[变量1 运算符 变量2] + - * / %
echo $((整数1 运算符 整数2)) $((变量1 运算符 变量2)) + - * / %
let a=10+5
let a++ 相当于 a=$[a+1]
let a-- 相当于 a=$[a-1]
let a+=2 相当于 a=$[a+2]
浮点数运算
echo '4.5+2.1' | bc
awk 'BEGIN{print 4.5+2.1}'
3、特殊的Shell变量
(1)环境变量
- 由系统提前创建,用来设置用户的工作环境
- 配置文件: /etc/profile、~/.bash_profile
(2)常见的环境变量
- PWD、PATH
- USER、SHELL、HOME
环境变量
env #查看当前shell环境中所有可用的环境变量
/etc/profile ~/.base_profile
export PATH USER PWD HOME LANG HISTSIZE
(3)只读变量
- 用于变量值不允许被修改的情况
只读变量
readonly 变量名=变量值 #只读变量不允许被修改变量值和删除变量
(4)位置变量
- 表示为$n,n为1~9之间的数字
位置变量
./test.sh one two three four .... ten
$0 $1 $2 $3 $4 ${10}
(5)预定义变量
预定义变量
$0 代表脚本本身
$# 代表脚本后面跟的位置参数的数量
$? 代表的是上一条Linux命令执行的返回状态码(0~255),0表示上一条命令执行正确,非0值则表示上一条命令执行异常
$* 默认代表脚本后面跟的所有参数,加上双引号后 "$*" 会把所有参数看做一个整体
$@ 默认代表脚本后面跟的所有参数,加上双引号后 "$@" 还是会把每个参数看做
date +"%Y%m%d" 当天日期
date -d "1 day" +"%Y%m%d" 昨天日期
date +"%Y%m01" 当月第一天
date -d "1 month" +"%Y%m01" 下个月第一天
date -d "$(date -d "1 month" +"%Y%m01") -1 day" +"%Y%m%d" 当月最后一天 ·