1 shell基本介绍
shell是一个命令行解释器,为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用shell来启动、挂起、停止甚至编写一些程序。
1.1 shell脚本的执行方式
脚本格式要求:
1. 脚本以#!/bin/bash开头
2. 脚本需要有可执行权限
脚本常用执行方式:
方式1. 输入脚本的绝对路径或者相对路径
若不修改权限将会无法打开,所以要用chmod赋予脚本的 +x权限,再执行脚本
方式2. sh 脚本名称
此时不用赋予脚本 +x的权限,直接执行即可
1.2 shell的变量
1.2.1 shell 介绍
Linux shell 中的变量分为 系统变量和用户自定义变量
echo $HOME -- 显示当前家目录
显示当前shell中的所有变量:set
1.2.2 shell变量的定义
基本语法
定义变量:变量=值(中间不要打空格)
撤销变量:unset 变量
声明静态变量:readonly变量(不能被unset)
案例:
定义变量的规则
1. 变量名称可以由字母、数字和下划线组成,但是不能以数字开头
2. 等号两边不能有空格
3. 变量名称一般习惯为大写,这是一个规范
将命令返回值赋给变量
1. A=`data` ,运行里面的命令,并把结果返回给变量A
2. A=$(data),等价于用反引号
1.2.3 设置环境变量
基本语法
1. export 变量名=变量值 --> 将shell变量输出为环境变量/全局变量
2. source 配置文件 --> 让修改后的配置信息立即生效
3. echo $变量名 --> 查询环境变量的值
shell脚本的多行注释:
:<<!
内容
!
1.2.4 位置参数变量
当我们执行一个shell脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量。如,./myshell.sh 100 200 这就是一个执行shell的命令行,可以在myshell脚本中获取到参数信息
基本语法
$n --> n为数字:0:命令本身;1~9:第1~9个参数,10以上的参数需要用大括号包含,如${10}
$* --> 这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体
$@ --> 这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待
$# --> 这个变量代表命令行中所有参数的个数
1.2.5 预定义变量
shell设计者事先已经预定好的变量,可以直接在shell脚本中使用
基本语法
$$ --> 当前进程的进程号PID
$! --> 后台运行的最后一个进程的进程号PID
$? --> 最后一次执行的命令的返回状态。如果这个变量的值为0,则证明上一个命令正确执行;如果这个变量的值非0(具体是哪个数由命令自己来决定),则证明上一个命令执行不正确了
1.3 运算符
1.3.1 基本介绍
"$((运算式))" 或 "$[运算式]" 或 expr m + n //expression表达式,注意expr运算符间要有空格。若希望将expr的结果赋给某个变量,使用``括起整个式子
expr m - n
expr \*, /, % 乘, 除, 取余
1.4 条件判断
1.4.1 判断语句
基本语法
[ condition ](注意:condition前后要有空格)
#非空返回ture,可使用$?验证(0为true,>1为false)
应用实例
常用判断条件
1. = 字符串比较
2. 两个整数的比较
-lt 小于 -->little -gt 大于 --> greater
-le 小于等于 -ge 大于等于
-eq 等于 -ne 不等于
3. 按照文件权限进行判断
-r 有读的权限
-w 有写的权限
-x 有执行的权限
4. 按照文件类型进行判断
-f 文件存在并且是一个常规文件 file
-e 文件存在 exist
-d 文件存在并是一个目录 directory
案例
2 流程控制
2.1 if判断
if [ 条件判断式 ]
then
代码
elif [ 条件判断式 ]
then
代码
fi
2.2 case语句
case $变量名 in
"值1")
如果变量的值等于值1,则执行程序1
;;
"值2")
如果变量的值等于值2,则执行程序2
;;
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac
2.3 for循环
基本语法1
for 变量 in 值1 值2 值3...
do
程序
done
基本语法2
for (( 初始值;循化控制条件;变量变化 ))
do
程序
done
2.4 while循环
while [ 条件判断式 ]
do
程序
done
3.1 read读取控制台
基本语法
read(选项)(参数)
4 函数
4.1 函数介绍
shell编程和其他编程语言一样,有系统函数,也可以自定义函数
4.2 系统函数
4.2.1 basename 基本语法
功能:返回完整路径最后 / 的部分,常用于获取文件名
basename [pathname] [suffix]
basename [string] [suffix]
basename命令会删掉所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来
选项:
suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉
应用案例
不带后缀则将输出后缀,带后缀则将后缀去掉:
4.2.2 dirname基本语法
功能:返回完整路径最后 / 的前面部分,常用于返回路径部分
dirname 文件绝对路径
从给定的包含绝对路径的文件名中去除文件名(非目录部分),然后返回剩下的路径(目录部分)
4.3 自定义函数
基本语法:
[ function ] funname[()]
{
Action;
[return int;]
}
调用直接写函数名:funname [值]
案例
5 定时备份数据库
shell编程综合案例:
需求分析
1. 每天凌晨2:30备份数据库 hspEduDB 到 /data/backup/db
2. 备份开始和备份结束能够提供相应的提示信息
3. 备份后的文件要求以备份时间为文件名,并打包成.tar.gz的形式
4. 在备份的同时,检查是否有10天前备份的数据库文件,如果有就将其删除
思路分析 -- 数据库备份步骤