1.11 read读取控制台输入
read(选项)(参数)
选项:
-p:指定读取值时的提示符;
-t:指定读取值时等待的时间(秒),如果没有在指定时间内输入,就不再等待了。
参数
变量:指定读取值的变量名
1.12 函数
shell编程和其他编程语言一样,有系统函数,也可以自定义函数。
系统函数
basename(返回完整路径最后/的部分,常用于获取文件名)
basename [pathname] [suffix]
basename [string] [suffix]
suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉。
dirname(返回完整路径最后/的前面部分,常用于返回lu路径部分)
dirname 文件绝对路径(从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分))
自定义函数
[function] funname[()]
{
Action;
[return int;]
}
调用直接写函数名:funname [值]
1.13 Shell编程综合案例
需求分析:
(1)每天凌晨2:10备份数据库DB1到/data/backup/db
(2)备份开始和备份结束能够给出相应的提示信息
(3)备份后的文件要求以备份时间为文件名,并打包成.tar.gz的形式,比如2018-05-04_154833.tar.gz
(4)在备份的同时,检查是否有10天前备份的数据库文件,如果有就将其删除。
脚本代码如下(mysql_db_backup.sh):
#!/bin/bash
#完成数据库的定时备份。
#备份的路径
BACKUP=/data/backup/db
#当前的时间作为文件名
DATETIME=$(date +%Y_%m_%d_%H%M%S)
#可以输出变量调试
#echo ${DATETIME}
echo "=======开始备份========"
echo "=======备份的路径是 $BACKUP/$DATETIME.tar.gz"
#主机
HOST=localhost
#用户名
DB_USER=root
#密码
DB_PWD=123456
#备份数据库名
DATABASE=DB1
#创建备份的路径
#如果备份的路径文件夹存在,就使用,否则就创建
[ ! -d "$BACKUP/$DATETIME" ] && mkdir -p "$BACKUP/$DATETIME"
#执行mysql的备份数据库的指令
mysqldump -u${DB_USER} -p${DB_PWD} --host=$HOST $DATABASE | gzip > $BACKUP/$DATETIME/$DATETIME.sql.gz
#打包备份文件
cd $BACKUP
tar -zcvf $DATETIME.tar.gz $DATETIME
#删除临时目录
rm -rf $BACKUP/$DATETIME
#删除10天前的备份文件
find $BACKUP -mtime +10 -name "*.tar.gz" -exec rm -rf {} \;
echo "=====备份文件成功==========="
注意:
有时候安装好MySQL程序的时候,直接输入命令mysql或mysqldump会发现提示命令不存在,这是由于系统默认会查找/usr/bin下的命令,如果这个命令不在这个目录下,当然会找不到命令
解决方法;
首先得知道mysql命令或mysqldump命令的完整路径,可以使用find命令查找
find / -name mysql -print
比如mysql的路径是:/usr/local/mysql/bin/mysql,然后映射一个链接到/usr/bin目录下,相当于建立一个链接文件
ln -s /usr/local/mysql/bin/mysql /usr/bin
转载请注明:IT运维空间 » Shell » Shell编程详解(四)
发表评论