Linux 之 Shell 脚本
格式要求
脚本必须以 #!/bin/bash
开头。
执行方式
- 添加可执行权限
x
,使用路径执行。 - 使用
sh hello.sh
直接执行。
系统变量
显示当前 shell
中所有变量:set
。
示例:$HOME
,$PWD
,$SHELL
,$USER
。
预定义变量
$$
:当前进程的进程号。$!
:后台允许的最后一个进程号(PID)。$?
:最后一次执行的命令的返回状态(0
表示成功,非0
表示失败)。
运算符(三种)
推荐:$[运算式]
。
条件判断
[ condition ]
注意:condition
前后需要有空格。非空分会 true
,可使用 $?
验证(0
为 true
,>1
为 false
)。
1. 字符串比较
=
比较两个字符串
2. 整数比较
-lt
:小于。-le
:小于等于。-eq
:等于。-gt
:大于。-ge
:大于等于。-ne
:不等于。
3. 文件权限比较
-r
:可读权限。-w
:可写权限。-r
:可执行权限。
4. 文件类型比较
-e
:文件存在。-f
:存在,并且是一个文件。-d
:存在,并且是一个目录。
if 判断语法
if [ condition ] && [ condition ] && ...
then
代码
elif [ condition ] && [ condition ] && ...
then
代码
else
代码
fi
case 判断语法
case $变量 in
"值1")
代码1;;
"值2")
代码2;;
esac
read 读取控制台输入
-p
:提示描述。-t
:等待时间。
示例代码:
read -t 10 -p "请在 10 秒内输入你的 姓名 年龄(空格分开) : " NAME AGE
echo "姓名: $NAME"
echo "年龄: $AGE"
需求分析:SHELL 编程综合案例(备份数据库)
- 每天凌晨
2:30
备份数据deme
到/data/backup/db
。 - 备份开始和备份结束能够给出相应的提示信息。
- 备份后的文件要求以备份时间为文件名,并打包成
.tar.gz
的形式,比如:2001-01-01_230201.tar.gz
。 - 在备份的同时,检查是否有
10
天前备份的数据库文件,如果有就删除。
代码实现: shell 编程综合案例(备份数据库)
#备份目录
BACKUP=/data/backup/db
#当前时间
DATETIME=$(date +%Y-%m-%d_%H%M%S)
echo $DATETIME
#数据库地址
HOST=localhost
#数据库用户名
DB_USER=root
#数据库密码
DB_PW=root
#备份数据库的名称
DATABASE=demo
#创建备份目录,如果不存在就创建
[ ! -d $BACKUP/$DATETIME ] && mkdir -p $BACKUP}/$DATETIME
#备份数据库
mysqldump -u$DB_USER -p$DB_PW --host=$HOST -q -R -databases $DATABASE | gzip > $BACKUP/$DATETIME/$DATETIME.sql.gz
#将文件处理成 tar.gz
cd $BACKUP
tar -zcvf $DATETIME.tzr.gz $DATETIME
#删除对应的备份目录
rm -rf $BACKUP/$DATETIME
#删除 10 天前的备份文件
find $BACKUP -atime +10 -name "*.tar.gz" -exec rm-rf {} \;
echo "备份数据库 $database 成功~"