Shell编程规范与变量
完成自动化运维工作,批量完成重复操作,结合crontab完成周期性任务
1.Shell脚本概述
Shel脚本的概念:将要执行的命令按顺序保存到一个文本文件;给该文件可执行权限;可结合各种Shell控制语句以完成更复杂的操作。
Shell脚本应用场景:重复性操作;交互性任务;批量事务处理;服务运行状态监控;定时任务执行...
(1)Shell的作用——命令解释器,“翻译官”
介于系统内核与用户之间,负责解释命令行
(2)用户登录Shell
登录后默认使用的Shel程序,一般为 /bin/bash
不同Shell的内部指令、运行环境等会有所区别
sh:UNIX最初使用的 shell,已经被bash所替换。
bash:基准于GNU的框架下发展出的Shell,是 sh 的扩展。
csh:语法有点类似于c语言的Shell。
tcsh:整合了csh,提供更多的功能。
nologin:奇怪的shell,这个shell可以让用户无法登录主机。
2.Shell编程规范
(1)编写脚本代码
使用vim文本编辑器
每行一条Linux命令,按执行顺序依次编写 vim XXX.sh
赋予可执行权限,使脚本具有可执行属性chmod +x XXX.sh
编程语言类型:
编译型:C C++ JAVA GO
代码文件需要先编译后,程序才能执行
解释型:SHELL PYTHON
代码是边解释边运行
(2)脚本编写结构
(1)申明解释器
#!/bin/bash
#!/bin/python
(2)编写注释信息:要以 # 号开头表示为注释,被注释的语句在脚本运行时是不会被执行的。
(3)编写执行语句:按照顺序编写要执行的命令语句。
(3)Shell脚本的运行
(1)bash 或 sh 指定脚本文件运行,可无执行权限
绝对路径或相对路径指定脚本文件运行,要求有执行权限
以上两种方式都是在子Shell环境中执行脚本
(2)source 或 . 指定脚本文件运行,可无执行权限
会在当前shell环境中执行脚本
3.重定向与管道
(1)交互式硬件设备
标准输入:从设备接收用户输入的数据
标准输出:通过该设备向用户输出是数据
标准错误:通过该设备报告执行出错信息
(2)重定向操作
命令 > 文件 2>&1 效果等效于混合输出
ls -lh > test.txt 2>&1
ls -lh 标准输出 到屏幕 1 →屏幕
ls -lh > test.txt 重定向输出 到 test.txt 1 → test.txt
2>&1 错误输出 重定向到 标准输出 2 → 1
(3)管道操作“|”
将左侧的命令输出结果,作为右侧命令的处理对象
4.Shell脚本变量
变量的作用:用来存放系统和用户需要使用的特定参数(值)
变量名:使用固定的名称,由系统预设或用户定义
变量值:能够根据用户设置、系统环境的变化而变化
变相的类型:
自定义变量:由用户自己定义、修改和使用
特殊变量:环境变量,只读变量,位置变量,预定义变量
(1)自定义变量
(1)定义一个新的变量
变量名以字母或下划线开头,区分大小写,建议大写
变量名=变量值
查看变量的值
echo $变量名
(2)赋值时使用引号
双引号 "$XXX" 会把$看作为引用XXX变量值的特殊符号
单引号 '$XXX' 会把$看作为一个普通字符,不会引用变量的值
反撇号 `...` 命令替换,提取里面的命令执行后的结果,效果等于$(...)
read -p "提示信息" 变量名 #从键盘输入中获取变量值
(3)设置变量的作用范围
默认情况下自定义的变量只能在当前shell环境中有效
export 变量名
export 变量名=变量值
导出为全局变量
让自定义的变量在所有shell环境中有效的方法:
(1)在 /etc/profile
文件中定义 export 变量名=变量值
导出为全局变量
source /etc/profile
立即生效 或 重新登录系统自动生效
(2)在 /etc/bashrc
文件中定义 变量名=变量值
切换 shell 环境自动生效
(4)整数变量的运算
expr 变量1 运算符 变量2
运算符 | |
---|---|
+ | 加法运算 |
- | 减法运算 |
* | 乘法运算 |
/ | 除法运算 |
% | 求模(取余)运算 |
整数运算
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}'
(2)特殊变量
(1)环境变量
由系统提前创建,用来设置用户的工作环境
配置文件:/etc/profile、~/.bash_profile
env #查看当前shell
常见的环境变量 | |
---|---|
PWD | 当前所在的工作目录 |
PATH | 可执行程序的默认搜索路径 |
USER | 用户名称 |
HOME | 用户的宿主目录 |
HISTSIZE | 历史记录 |
(2)只读变量
用于变量值不允许被修改的情况
readonly
只读变量不可以被重新赋值
只读变量不可以被删除
(3)位置变量
(4)预定义变量
当天日期 date +"%Y%m%d"
明天日期 date -d "1 day" +"%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"