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=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输出信息和异常信息

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

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

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

原文地址:https://www.cnblogs.com/lsy-blogs/p/9223477.html

时间: 2024-10-08 10:22:49

Shell脚本使用汇总整理的相关文章

Shell脚本使用汇总整理——mysql数据库5.7.8以前备份脚本

Shell脚本使用的基本知识点汇总详情见连接: https://www.cnblogs.com/lsy-blogs/p/9223477.html 脚本分为三部分配置信息.脚本文件.定时任务: 1.配置信息: username=rootpassword=123456backupsFileStr=/wocloud/db/backupsbackupsFileDay=3mysqldumpStr=/usr/bin/mysqldumpcopydb=hebei,reportSystem 参数说明: usern

Shell脚本命令汇总中

一.换行 echo -e 可以通过\n编译换行 echo -n不换行,如果加入了\n,则会打出“\n”字符 #!/bin/bash echo -e "O\nK\n!" echo "It is a test" #!/bin/bash echo -n "OK!" echo "It is a test" #!/bin/bash echo -n "O\nK\n!" echo "It is a test&q

shell脚本输出多个主机的网卡速率

背景: 记录下之前的写过的shell脚本,需要整理出各个主机的各个网卡速率,网卡名称为bond0到bond3,使用ethtool bond1命令可以查看相应网卡的速率.因为有几十台主机,所以考虑使用shell脚本去查询. 具体思路: 查询单台主机单网卡速率命令: ethtool bond1 | grep Speed Speed: 20000Mb/s 查询单台主机所有bond网卡速率命令,输出网卡名称和对应的网卡速率: for i in {0..3};do echo bond$i `/usr/sb

shell脚本汇总 2 删除创建时间超过32天的文件

shell脚本汇总 2 删除创建时间超过32天的文件 #!/bin/bash #date:2017-04-11 #version:clear_ballcloud_back_v1.0 #contents: removing the  /www/web/ballcloud_bakck/* , if the file is created above 32 day # cd /www/web #sum the size of already delete directory dirsize=`du -

shell脚本汇总 1 以年月日命名备份文件

shell脚本汇总 1 以年月日命名备份文件 #!/bin/bash # create a back package for mysql of ball and web of ballcloud # # backup mysql for ball and web for ballcloud cd /www/web/backup_ballcloud/ year=`date +%Y ` month=`date +%m ` day=`date +%d ` now=$year-$month-$day #

shell脚本学习整理(二)

条件测试--test 或[ 命令"test"或"["可以测试一个条件是否成立,如果测试结果为真,则该命令的退出码为0,如果测试结果为假,则命令的退出码为1. 常见测试命令举例: note:左方括号[是一个命令的名字,传给命令的各参数之间应该用空格隔开,比如,$VAR.-gt.3.]是[命令的四个参数,它们之间必须用空格隔开.命令test或[的参数 形式是相同的,只不过test命令不需要]参数. 与.或.非的测试命令  [ ! EXPR ]  : EXPR可以是上述中

shell企业级实用基础脚本(汇总1/2)

1.企业实用脚本1 (生产实用案例)监控MySQL主从同步是否异常,如果异常,则发送短信或者邮件给管理员.提示:如果没主从同步环境,可以用下面文本放到文件里读取来模拟 阶段1:开发一个守护进程脚本每30秒实现检测一次. 阶段2:如果同步出现如下错误号(1158,1159,1008,1007,1062),则跳过错误. 阶段3:请使用数组技术实现上述脚本(获取主从判断及错误号部分) [[email protected] shell]# mysql -uroot -pli123456 -S /data

shell脚本学习整理(一)

什么是shell脚本? Shell脚本与Windows/Dos下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的.但是它比Windows下的批处理更强大,比用其他编程程序编辑的程序效率更高,它使用了Linux/Unix下的命令. 初识shell脚本 写进去一串命令之后,可以按chmod +x test_8_8.sh或bash test_8_8.sh进行运行.(chmod后有空格) note:shell脚本一行即是一个命令无需加

Shell脚本链接整理

学习 shell脚本之前的基础知识:http://www.92csz.com/study/linux/12.htm shell脚本全面学习:http://blog.chinaunix.net/uid-9078183-id-2436460.html Shell脚本编程的常识:http://www.cnblogs.com/ebusi/archive/2011/02/09/1950422.html 经典shell 脚本实例:http://wenku.baidu.com/link?url=m66AyO7