Shell脚本使用汇总整理php
1、Shell脚本经常使用的头部格式:html
头部的做用就是告知linux此脚本的类型;mysql
经常使用的头部格式以下:(/bin/bash,是bash的路径,若是不知道路径能够经过which bash进行查看,其它命令的路径也是相似查看的)linux
(1)#!/bin/bash:普通的linux脚本,也是最经常使用的,不须要交互;sql
(2)#!/usr/bin/expect:能够自动交互的linux脚本,有可能须要安装expect,若是linux服务器上没有此expect命令的话。shell
2、Shell脚本中如何执行Linux或自定义的脚本命令:数据库
在普通的#!/bin/bash脚本中,执行linux命令,通常要写该命令的全路径,若是不知道全路径的,能够经过which 命令,进行查看全路径,若是须要后台执行,就在命令最后+空格+&。数组
3、Shell脚本中如何进行自动交互:bash
若是须要在shell脚本中实现自动交互,通常是经过expect进行实现的,方便好用,须要注意的是expect脚本中多是不能执行一些linux命令的,若是必定须要执行该linxu命令,能够将该Linxu命令写入到一个普通的shell脚本中去,而后在expect脚本中经过调用执行该linux命令的普通脚本,从而实现需求;服务器
Expect脚本具体写法能够参考如下链接:
https://www.cnblogs.com/lixigang/articles/4849527.html
4、Shell脚本如何定时执行:
Linux中定时执行shell脚本,能够经过crond进行控制,须要linux中安装crond,并在经过crontab -e命令进行配置,具体参照如下链接:
http://www.javashuo.com/article/p-xahiqhuj-t.html
设定定时任务:
crontab -e 而后添加一条定时任务信息 保存文件 service crond restart
修改定时任务:
crontab -e 而后修改某个定时任务信息 保存文件 service crond restart
删除定时任务:
crontab -e 而后删除某个定时任务信息 保存文件便可 service crond restart
查看定时任务:
crontab -l
5、脚本中经常使用功能:
一、定义变量:
变量名+等号+值(若是是非数字的建议加上双引号)
二、获取变量:
(1)$变量名:此方法获取不太好,没有明确的变量边界;
(2)${变量名}:建议用此方法,变量名有明确的边界;
三、定义数组:
变量名+等号+括号(括号中的内容用空格分割)
四、获取数组中某个角标的值:
${数组名[角标]}:此方法能够获取某个数组中某个角标的值
五、获取当前日期:
六、获取几天前日期:
七、获取几天后日期:
将几天的数字修改成负数便可
八、加强for循环:
九、普通for循环:
十、输出信息:
echo 变量或字符串均可以,用双引号扩住便可;
十一、字符串拼接:
直接变量加字符串拼接就行,不须要有+;
十二、字符串剪切:
(1)从左边第几个字符开始,截取几个字符:
(2)从左边第几个字符开始,一直到结束:
(3)从右边第几个字符开始,截取几个字符:
(4)从右边第几个字符开始,一直到结束:
1三、字符串分隔:
1四、条件判断if:
1五、经常使用的运算符:
(1)算数运算符:
(2)关系运算符:
(3)布尔运算符:
(4)字符串运算符:
(5)文件测试运算符:
1六、读取文件中的数据存储到一个数组中去:
1七、读取文件中的键值对数据存储到一个map中去:
注意:文件中的值必定要是键值对的形式,而且第一列中的名称通常是定死的,不能任意修改;
主要思路:
(1)首先经过两次读取两列的内容存储到两个数组中去;
(2)而后遍历一个数组,用第一个数组中的值做为key,第二个数组中的值做为value值,存储到map中去;
(3)在须要的时候,能够从map中经过输入某个key值获取其value值;
默认是用空格分列的:
指定分列的符号为“=”:
1八、判断一个文件是否存在:
判断文件使用:-f
1九、判断一个文件夹是否存在:
判断文件夹使用-d
20、定义一个map以及常见使用方法:
若是()中没有内容,那就是一个空map;
其它shell基本经常使用功能见链接:
http://www.runoob.com/linux/linux-shell.html
6、经过shell脚本定时自动备份mysql数据库数据到sql文件:
一、主要思路:
(1)定义一个数据库备份信息的txt文件,其中有如下几项:
用户名
密码
备份的数据库(多个库用逗号分隔)
备份数据文件的路径
保留备份文件的天数
数据导出工具mysqldump的文件路径
(2)定义一个脚本.sh文件,具体功能以下:
读取txt文件中的信息到一个map中去;
获取备份的数据库字符串,经过分割,结果存储到数组中;
获取当前日期和保留文件天数之前的日期;
首先经过遍历备份数据库数组,删除保留文件天数外的sql文件;
而后再次遍历备份数据库数组,导出数据库中的数据到sql文件;
(3)经过crontab -e命令编辑crontab文件,将后台定时执行脚本.sh文件,而后service crond restart从新启动crond,以便经过crond定时执行脚本文件,实现定时备份mysql数据库中的数据到sql文件中去。
二、具体代码:
(1)备份数据库信息的txt信息以下:
username=root password=123456 backupsFileStr=/wocloud/db/backups backupsFileDay=3 mysqldumpStr=/usr/bin/mysqldump copydb=jeecg,kettle,km,dataSharing,hebei,reportSystem
(2)脚本.sh文件信息以下:
#!/bin/sh #db_backups_conf.txt文件路径 db_backups_conf="/wocloud/shell/db_backups_conf.txt" #判断文件是否存在 if [ -f "${db_backups_conf}" ];then echo $(date +'%Y-%m-%d %H:%M:%S')" 数据库配置信息文件存在,开始进行数据备份" #获取等号前内容,做为map中的Key值 dbArrOne=($(awk -F'[=]' '{print $1}' ${db_backups_conf} )) #获取等号后内容,做为map中的value值 dbArrTwo=($(awk -F'[=]' '{print $2}' ${db_backups_conf})) #建立一个空map declare -A map=() #经过循环,将db_backups_conf配置文件中的信息存储在map中 for((i=0;i<${#dbArrOne[@]};i++)) do map[${dbArrOne[i]}]=${dbArrTwo[i]} done #获取备份数据库的字符串 copyDb=${map["copydb"]} #获取默认的字符串分隔符 old_ifs="$IFS" #设置字符串分隔符为逗号 IFS="," #将备份数据库value值的字符串进行分隔,获取一个数组 dbArr=($copyDb) #将字符串的分隔符从新设置为默认的分隔符 IFS="$old_ifs" #获取当前年月日 saveday=$(date +%Y%m%d) #获取超出备份天数的年月日 delday=$(date -d ${map["backupsFileDay"]}' days ago' +%Y%m%d) #遍历要备份的数据库,删除两天前备份的数据文件 for delDb in ${dbArr[@]}; do echo $(date +'%Y-%m-%d %H:%M:%S')" 删除文件:"${map["backupsFileStr"]}/${delDb}_database_${delday}.sql rm -f ${map["backupsFileStr"]}/${delDb}_database_${delday}.sql done #遍历要备份的数据库,备份数据文件 for saveDb in ${dbArr[@]}; do echo $(date +'%Y-%m-%d %H:%M:%S')" 备份数据库:"${saveDb} ${map["mysqldumpStr"]} -u${map["username"]} -p${map["password"]} ${saveDb} > ${map["backupsFileStr"]}/${saveDb}_database_${saveday}.sql done echo $(date +'%Y-%m-%d %H:%M:%S')" 数据备份完毕,脚本执行完毕" else echo "文件不存在" fi
(3)crontab定时后台执行shell脚本命令以下:(必定要将shell脚本重定向到一个文件中去,以便接收shell脚本的echo输出信息和异常信息)
2、脚本中打印日志信息,制做脚本执行日志文件:
在编写脚本过程当中,关键的步骤点,能够经过echo打印日志信息到桌面显示屏中。通常编写的shell脚本都是须要定时执行的,通常经过crond就能够简单的实现shell脚本的定时执行,经过crontab -e编写定时任务的时候,必定要记住,将shell脚本中打印日志的信息重定向到一个文件中去,这样就能够经过观察此文件中的日志信息来观察shell是否正常运行了。
输出日志经常使用格式:年-月-日 时:分:秒 日志内容
crond中设定定时任务时,重定向的日志文件,最好是在一个文件夹下,每次输出一个文件,这样文件添加一个日期就能够轻松解决,之后也方便查看日志:文件名_日期.txt:
12 10 * * * /wocloud/shell/mysqlBackupsSql.sh &>/wocloud/shell/mysqlBackupsLogs/mysqlBackupsEcho_`date +\%Y-\%m-\%d`.txt 2>&1
很是注意:日志格式化中用的是斜号(Esc下面那个键),不是单引号;
7、经常使用的工具化sh脚本:
一、达梦数据库备份脚本:
http://www.javashuo.com/article/p-hiayvxjp-dt.html
二、mysql数据库5.7.8之前版本备份脚本:
http://www.javashuo.com/article/p-voebspan-ea.html
三、mysql数据库5.7.8之后版本备份脚本:
http://www.javashuo.com/article/p-vbjzgwml-dw.html
四、文件夹及子文件备份脚本: