shell怎么去整_Shell脚本使用汇总整理

Shell脚本使用汇总整理

一、Shell脚本常用的头部格式:

头部的作用就是告知linux此脚本的类型;

常用的头部格式如下:(/bin/bash,是bash的路径,如果不知道路径可以通过which bash进行查看,其它命令的路径也是类似查看的)

(1)#!/bin/bash:普通的linux脚本,也是最常用的,不需要交互;

03a31fbac5d7a53c354967a979a5190e.png

(2)#!/usr/bin/expect:可以自动交互的linux脚本,有可能需要安装expect,如果linux服务器上没有此expect命令的话。

二、Shell脚本中如何执行Linux或自定义的脚本命令:

在普通的#!/bin/bash脚本中,执行linux命令,一般要写该命令的全路径,如果不知道全路径的,可以通过which命令,进行查看全路径,如果需要后台执行,就在命令最后+空格+&。

6b1761102c789b7104670371bf0a6b73.png

4d664e8a88c84563c5e1897aa7b7fe24.png

三、Shell脚本中如何进行自动交互:

如果需要在shell脚本中实现自动交互,一般是通过expect进行实现的,方便好用,需要注意的是expect脚本中可能是不能执行一些linux命令的,如果一定需要执行该linxu命令,可以将该Linxu命令写入到一个普通的shell脚本中去,然后在expect脚本中通过调用执行该linux命令的普通脚本,从而实现需求;

Expect脚本具体写法可以参考以下连接:

四、Shell脚本如何定时执行:

Linux中定时执行shell脚本,可以通过crond进行控制,需要linux中安装crond,并在通过crontab -e命令进行配置,具体参照以下连接:

设定定时任务:

crontab -e 然后添加一条定时任务信息 保存文件service crond restart

修改定时任务:

crontab -e 然后修改某个定时任务信息 保存文件service crond restart

删除定时任务:

crontab -e 然后删除某个定时任务信息 保存文件即可service crond restart

查看定时任务:

crontab -l

五、脚本中常用功能:

1、定义变量:

变量名+等号+值(如果是非数字的建议加上双引号)

86c48cf8b631ee8bc79110e845adacfb.png

2、获取变量:

(1)$变量名:此方法获取不太好,没有明确的变量边界;

(2)${变量名}:建议用此方法,变量名有明确的边界;

3、定义数组:

变量名+等号+括号(括号中的内容用空格分割)

a6e256b15fe9194e835b0780d2ae66aa.png

4、获取数组中某个角标的值:

${数组名[角标]}:此方法可以获取某个数组中某个角标的值

5、获取当前日期:

40ac3d2a74986bb0a273dddfe698d97b.png

6、获取几天前日期:

dc3ec727b216a0d75e71718d59ba5766.png

7、获取几天后日期:

将几天的数字修改为负数即可

8、增强for循环:

ddae23cec45d7f4edcbebe8cf1744eeb.png

9、普通for循环:

818526da2c59a9fa39da6a94e3751dc5.png

10、输出信息:

echo 变量或字符串都可以,用双引号扩住即可;

11、字符串拼接:

直接变量加字符串拼接就行,不需要有+;

81038fb3d532e49cded1694d7a59807f.png

12、字符串剪切:

(1)从左边第几个字符开始,截取几个字符:

e4bbf2b5f91d4d3ec79a7724038a6e83.png

(2)从左边第几个字符开始,一直到结束:

205c36f463c823bbe3693035b04d74ad.png

(3)从右边第几个字符开始,截取几个字符:

647a6e7a786f182557999cf91cde6064.png

(4)从右边第几个字符开始,一直到结束:

eae57e442bfe51907ffd39e4d16ee801.png

13、字符串分隔:

d08a2140e1bdbc57ac8194b2f628b8aa.png

14、条件判断if:

12285debf8bcdb0254f5a4f302cd5ddc.png

15、常用的运算符:

(1)算数运算符:

047b839adf074db743702b3e416224b7.png

(2)关系运算符:

1839f8b993e127b7e458a3f34a73c6d1.png

(3)布尔运算符:

c8297451a68cb3d74bfe92f3c4195dde.png

(4)字符串运算符:

7e71eecb33a11a6f385ab690d88497a1.png

(5)文件测试运算符:

0fd3e66d8d5a8de89af056077477e341.png

16、读取文件中的数据存储到一个数组中去:

9d9d1084d23a60aff9e6deda2ef5dcd1.png

17、读取文件中的键值对数据存储到一个map中去:

注意:文件中的值一定要是键值对的形式,并且第一列中的名称一般是定死的,不能任意修改;

主要思路:

(1)首先通过两次读取两列的内容存储到两个数组中去;

(2)然后遍历一个数组,用第一个数组中的值作为key,第二个数组中的值作为value值,存储到map中去;

(3)在需要的时候,可以从map中通过输入某个key值获取其value值;

默认是用空格分列的:

d3795ef75152e76cef036017b6e78f90.png

指定分列的符号为“=”:

de8c492eb1f25c742836582c77410ca3.png

18、判断一个文件是否存在:

判断文件使用:-f

2e65af73ebabb434a5d3b2a20b570e9f.png

19、判断一个文件夹是否存在:

判断文件夹使用-d

8b1404ee9c87ea379dab152b8842cc2c.png

20、定义一个map以及常见使用方法:

如果()中没有内容,那就是一个空map;

f033a52eb07a65a3807dad2e150de8e5.png

其它shell基本常用功能见连接:

六、通过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=123456backupsFileStr=/wocloud/db/backups

backupsFileDay=3mysqldumpStr=/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

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[@]};doecho $(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[@]};doecho $(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')"数据备份完毕,脚本执行完毕"

elseecho"文件不存在"fi

(3)crontab定时后台执行shell脚本命令如下:(一定要将shell脚本重定向到一个文件中去,以便接收shell脚本的echo输出信息和异常信息)

0b84208ba089b05353a5ae003192850e.png

二、脚本中打印日志信息,制作脚本执行日志文件:

在编写脚本过程中,关键的步骤点,可以通过echo打印日志信息到桌面显示屏中。一般编写的shell脚本都是需要定时执行的,一般通过crond就可以简单的实现shell脚本的定时执行,通过crontab -e编写定时任务的时候,一定要记住,将shell脚本中打印日志的信息重定向到一个文件中去,这样就可以通过观察此文件中的日志信息来观察shell是否正常运行了。

输出日志常用格式:年-月-日 时:分:秒 日志内容

57427ddeee6ca8520ec4a1f3e828a387.png

77dcb1150bd397cd024ebf2aa4c20dac.png

crond中设定定时任务时,重定向的日志文件,最好是在一个文件夹下,每次输出一个文件,这样文件添加一个日期就可以轻松解决,以后也方便查看日志:文件名_日期.txt:

12 10 * * * /wocloud/shell/mysqlBackupsSql.sh &>/wocloud/shell/mysqlBackupsLogs/mysqlBackupsEcho_`date +\%Y-\%m-\%d`.txt 2>&1

非常注意:日志格式化中用的是斜号(Esc下面那个键),不是单引号;

七、常用的工具化sh脚本:

1、达梦数据库备份脚本:

2、mysql数据库5.7.8以前版本备份脚本:

3、mysql数据库5.7.8以后版本备份脚本:

4、文件夹及子文件备份脚本:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值