Shell脚本使用汇总整理
Shell脚本使用汇总整理
一、Shell脚本常用的头部格式:
头部的作用就是告知linux此脚本的类型;
常用的头部格式如下:(/bin/bash,是bash的路径,如果不知道路径可以通过which bash进行查看,其它命令的路径也是类似查看的)
(1)#!/bin/bash:普通的linux脚本,也是最常用的,不需要交互;
(2)#!/usr/bin/expect:可以自动交互的linux脚本,有可能需要安装expect,如果linux服务器上没有此expect命令的话。
二、Shell脚本中如何执行Linux或自定义的脚本命令:
在普通的#!/bin/bash脚本中,执行linux命令,一般要写该命令的全路径,如果不知道全路径的,可以通过which 命令,进行查看全路径,如果需要后台执行,就在命令最后+空格+&。
三、Shell脚本中如何进行自动交互:
如果需要在shell脚本中实现自动交互,一般是通过expect进行实现的,方便好用,需要注意的是expect脚本中可能是不能执行一些linux命令的,如果一定需要执行该linxu命令,可以将该Linxu命令写入到一个普通的shell脚本中去,然后在expect脚本中通过调用执行该linux命令的普通脚本,从而实现需求;
Expect脚本具体写法可以参考以下连接:
https://www.cnblogs.com/lixigang/articles/4849527.html
四、Shell脚本如何定时执行:
Linux中定时执行shell脚本,可以通过crond进行控制,需要linux中安装crond,并在通过crontab -e命令进行配置,具体参照以下连接:
https://www.cnblogs.com/bcphp/p/7084967.html
设定定时任务:
crontab -e 然后添加一条定时任务信息 保存文件 service crond restart
修改定时任务:
crontab -e 然后修改某个定时任务信息 保存文件 service crond restart
删除定时任务:
crontab -e 然后删除某个定时任务信息 保存文件即可 service crond restart
查看定时任务:
crontab -l
五、脚本中常用功能:
1、定义变量:
变量名+等号+值(如果是非数字的建议加上双引号)
2、获取变量:
(1)$变量名:此方法获取不太好,没有明确的变量边界;
(2)${变量名}:建议用此方法,变量名有明确的边界;
3、定义数组:
变量名+等号+括号(括号中的内容用空格分割)
4、获取数组中某个角标的值:
${数组名[角标]}:此方法可以获取某个数组中某个角标的值
5、获取当前日期:
6、获取几天前日期:
7、获取几天后日期:
将几天的数字修改为负数即可
8、增强for循环:
9、普通for循环:
10、输出信息:
echo 变量或字符串都可以,用双引号扩住即可;
11、字符串拼接:
直接变量加字符串拼接就行,不需要有+;
12、字符串剪切:
(1)从左边第几个字符开始,截取几个字符:
(2)从左边第几个字符开始,一直到结束:
(3)从右边第几个字符开始,截取几个字符:
(4)从右边第几个字符开始,一直到结束:
13、字符串分隔:
14、条件判断if:
15、常用的运算符:
(1)算数运算符:
(2)关系运算符:
(3)布尔运算符:
(4)字符串运算符:
(5)文件测试运算符:
16、读取文件中的数据存储到一个数组中去:
17、读取文件中的键值对数据存储到一个map中去:
注意:文件中的值一定要是键值对的形式,并且第一列中的名称一般是定死的,不能任意修改;
主要思路:
(1)首先通过两次读取两列的内容存储到两个数组中去;
(2)然后遍历一个数组,用第一个数组中的值作为key,第二个数组中的值作为value值,存储到map中去;
(3)在需要的时候,可以从map中通过输入某个key值获取其value值;
默认是用空格分列的:
指定分列的符号为“=”:
18、判断一个文件是否存在:
判断文件使用:-f
19、判断一个文件夹是否存在:
判断文件夹使用-d
20、定义一个map以及常见使用方法:
如果()中没有内容,那就是一个空map;
其它shell基本常用功能见连接:
http://www.runoob.com/linux/linux-shell.html
六、通过shell脚本定时自动备份mysql数据库数据到sql文件:
1、主要思路:
(1)定义一个数据库备份信息的txt文件,其中有以下几项:
用户名
密码
备份的数据库(多个库用逗号分隔)
备份数据文件的路径
保留备份文件的天数
数据导出工具mysqldump的文件路径
(2)定义一个脚本.sh文件,具体功能如下:
读取txt文件中的信息到一个map中去;
获取备份的数据库字符串,通过分割,结果存储到数组中;
获取当前日期和保留文件天数以前的日期;
首先通过遍历备份数据库数组,删除保留文件天数外的sql文件;
然后再次遍历备份数据库数组,导出数据库中的数据到sql文件;
(3)通过crontab -e命令编辑crontab文件,将后台定时执行脚本.sh文件,然后service crond restart重新启动crond,以便通过crond定时执行脚本文件,实现定时备份mysql数据库中的数据到sql文件中去。
2、具体代码:
(1)备份数据库信息的txt信息如下:
username=root
password=
backupsFileStr=/wocloud/db/backups
backupsFileDay=
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=;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输出信息和异常信息)
二、脚本中打印日志信息,制作脚本执行日志文件:
在编写脚本过程中,关键的步骤点,可以通过echo打印日志信息到桌面显示屏中。一般编写的shell脚本都是需要定时执行的,一般通过crond就可以简单的实现shell脚本的定时执行,通过crontab -e编写定时任务的时候,一定要记住,将shell脚本中打印日志的信息重定向到一个文件中去,这样就可以通过观察此文件中的日志信息来观察shell是否正常运行了。
输出日志常用格式:年-月-日 时:分:秒 日志内容
crond中设定定时任务时,重定向的日志文件,最好是在一个文件夹下,每次输出一个文件,这样文件添加一个日期就可以轻松解决,以后也方便查看日志:文件名_日期.txt:
* * * /wocloud/shell/mysqlBackupsSql.sh &>/wocloud/shell/mysqlBackupsLogs/mysqlBackupsEcho_`date +\%Y-\%m-\%d`.txt >&
非常注意:日志格式化中用的是斜号(Esc下面那个键),不是单引号;
七、常用的工具化sh脚本:
1、达梦数据库备份脚本:
https://www.cnblogs.com/lsy-blogs/p/10174171.html
2、mysql数据库5.7.8以前版本备份脚本:
https://www.cnblogs.com/lsy-blogs/p/10174218.html
3、mysql数据库5.7.8以后版本备份脚本:
https://www.cnblogs.com/lsy-blogs/p/10174252.html
4、文件夹及子文件备份脚本:
https://www.cnblogs.com/lsy-blogs/p/10174297.html
Shell脚本使用汇总整理的更多相关文章
- Shell脚本使用汇总整理——达梦数据库备份脚本
Shell脚本使用汇总整理——达梦数据库备份脚本 Shell脚本使用的基本知识点汇总详情见连接: https://www.cnblogs.com/lsy-blogs/p/9223477.html 脚本 ...
- Shell脚本使用汇总整理——mysql数据库5.7.8以前备份脚本
Shell脚本使用汇总整理——mysql数据库5.7.8以前备份脚本 Shell脚本使用的基本知识点汇总详情见连接: https://www.cnblogs.com/lsy-blogs/p/92234 ...
- Shell脚本使用汇总整理——mysql数据库5.7.8以后备份脚本
Shell脚本使用汇总整理——mysql数据库5.7.8以后备份脚本 Shell脚本使用的基本知识点汇总详情见连接: https://www.cnblogs.com/lsy-blogs/p/92234 ...
- Shell脚本使用汇总整理——文件夹及子文件备份脚本
Shell脚本使用汇总整理——文件夹及子文件备份脚本 Shell脚本使用的基本知识点汇总详情见连接: https://www.cnblogs.com/lsy-blogs/p/9223477.html ...
- Shell脚本常用命令整理
该笔记主要整理了一些常见的脚本操作命令,大致如下(持续补充中): 1. while.for循环 1. while.for循环 #!/bin/bash # while循环 v_start_date=${ ...
- shell脚本知识点汇总
sed中在对内容进行修改时,有时候需要引用外部变量的值或者获取一个shell命令执行的结果,以便达到更加可观的输出结果 1.sed中使用变量替换1)sed命令使用双引号的情况下,使用$var直接引用[ ...
- Shell脚本命令汇总中
一.换行 echo -e 可以通过\n编译换行 echo -n不换行,如果加入了\n,则会打出“\n”字符 #!/bin/bash echo -e "O\nK\n!" echo & ...
- 常用shell脚本命令
常用shell脚本命令 1.显示包含文字aaa的下一行的内容: sed -n '/aaa/{n;p;}' filename 2.删除当前行与下一行的内容: sed -i '/aaa/{N;d;}' f ...
- shell脚本语法基础汇总
shell脚本语法基础汇总 将命令的输出读入一个变量中,可以将它放入双引号中,即可保留空格和换行符(\n) out=$(cat text.txt) 输出1 2 3 out="$(cat te ...
随机推荐
- pat1041. Be Unique (20)
1041. Be Unique (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Being uniqu ...
- React.js 小书 Lesson3 - 前端组件化(二):优化 DOM 操作
作者:胡子大哈 原文链接:http://huziketang.com/books/react/lesson3 转载请注明出处,保留原文链接和作者信息. 看看上一节我们的代码,仔细留意一下 change ...
- GitKraken使用教程-基础部分(2)
3. 修改用户名 为了方便项目中代码的管理,需要重新编辑用户名. 点击右上角的图像即可看到如下图 3‑1所示的下拉菜单,鼠标悬于Profile上,会出现一个Edit按钮. 图 3‑1 编辑个人信息 点 ...
- C#之Clone
因为类的实例是引用类型,要想用原有的类中的实例的数据的话,既要想创建原对象的一个副本的话,只能用clone方法. Clone方法分为深clone和浅clone 在C#中提供了浅clone的方法,即为M ...
- c# 字符串大小写混合转换
我是个.net萌新,在大学是计算机应用专业 学的比较杂 出来准备走net方向 培训了两个月了 今天被出了一道上机题 题本来是挺简单的 输入一个字符 如果是大写则转换为小写 如果是小写则转换为大 ...
- Spring课程 Spring入门篇 3-2 Spring bean装配(上)之bean的生命周期
课程链接: 本节主要讲了三大块内容 1 bean的生命周期概念 2 bean的初始化和销毁的三种方式对比(代码演练) 3 总结 1 bean的生命周期概念 1.1 bean的定义:xml中关于bean ...
- 《Head First 设计模式》之状态模式——糖果机
状态模式(State) ——允许对象在内部状态时改变它的行为,对象看起来好像修改了它的类. 策略模式与状态模式的区别 状态主体(拥有者)持有状态对象,运行时可以通过动态指定状态对象来改变类的行为 策略 ...
- spring-boot学习之属性配置
通过@value注解,将配置文件中的内容引入
- js数组Array方法
1. indexOf indexOf()方法返回在该数组中第一个找到的元素位置,如果它不存在则返回-1. var fruits = ["Banana", "Orange& ...
- 《ArcGIS Runtime SDK for Android开发笔记》——(3)、ArcGIS Runtime SDK概述
1.前言 ArcGIS Runtime SDK是一整套用于构建原生及跨平台的地图应用程序的开发包,包括移动设备的Android.iOS.Windows Phone,针对桌面的.Net.Java.OSX ...