澳门新浦京娱乐场网站-www.146.net-新浦京娱乐场官网
做最好的网站

澳门新浦京娱乐场网站Shell脚本使用汇总整理,一

Shell脚本使用汇总收拾

洋洋时候大家有期望服务器定期去运作二个脚本来触发三个操作,比方说依期去备份服务器数据、数据库数据等 不契合人工平常做的有的操作这里大致说下

Linux crond 不实行原因是怎样?怎么消除?,linuxcrond

为了准时监控Linux系统CPU、内部存款和储蓄器、负载的接受状态,写了Linux Shell脚本,当到达自然值得时候,准时发送邮件公告。

然则,让crond来周期性推行脚本发送邮件文告时,遇到了难题,在crontab -e里面参预了实行脚本之后,开掘脚本并不曾实践。

然则,通过手动实行Shell脚本命令(./mimvp-email.sh)是正规的,因为手动推行脚本能够暗许获取Linux的情况变量,但透过Crontab做的定期职责,则无从获取情况变量。

浅析了原由,crond不实行的缘由根本有以下多少个地方:

1、crond服务没运营

ps -ef | grep -v grep | grep crond // 查看crond服务是或不是运行

service crond start //关闭服务

service crond stop //关闭服务

service crond restart //重启服务

service crond reload //重新载入配置

2、客商未有施行crond的权杖

vim /etc/cron.deny文件用来决定什么客商不可能试行crond服务的作用。

能够将本身从文件中删除,只怕联系root

3、crontab不提供所实行顾客的碰着变量

消除措施:在本子中投入下边那风度翩翩行:

. /etc/profile

. ~/.bash_profile

4、未有动用相对路线

那边的相对路线包含脚本中的路线和crond命令中的路线多少个地点,比如:

*/10 * * * * sh/root/script/mysql_files_monitor.sh&

5、假设上边都未曾缓和难题的话能够再找找难题:

1)去邮件看看,在这里个进度中客商应该会收取邮件,举例收受那样的唤起:

vim /var/spool/mail/root

You have mail in /var/spool/mail/root

去看看里面就有crond的源委

文件太大打不开,能够截取最后1000行查看

tail -n 1000 /var/spool/mail/root > aaa.txt && vim aaa.txt

2)在本子里面参加output用来调整

能够在crontab的脚本里面增加个

echo $PATH > /tmp/test.log

相对来说和顶峰下实行脚本的echo $PATH

6、crond进程太多,全体杀掉重启crond服务

#!/bin/bash

for i in $(ps -elf | grep -v grep | grep crond | awk -F " " '{print $4}'); do

kill -9 $i

done

动用root施行重启,后难点解决:

service crond restart

7、crond幸免脚本周期内未推行完重复试行

个体体会:flock -xn my.lock cmd

my.lock是多个文书,能够是轻巧文件,能够新建三个空文件

当flock 得到锁后就能够实践前边的 cmd

测量检验进度:

$1: flock -xn my.lock sleep 20

$2: flock -xn my.lock ls

除非当1再次来到后, 2的ls才会成功

若是某脚本要运营30分钟,能够在Crontab里把脚本间距设为最少后生可畏钟头来防止冲突。而相比较糟的景况是或然该脚本在实行周期内还未达成,接着第4个本子又起头运营了。怎么样确认保障独有多个剧本实例运维吧?二个好用的不二秘籍是采纳lockf(FreeBSD 8.1下为lockf,CentOS 5.5下为flock),在剧本施行前先检查实验是不是获得某些文件锁,以卫戍脚本运营冲突。

lockf 参数如下

-k:向来守候获取文件锁。

-s:silent,不发生任何新闻,就算拿不到文件锁。

-t seconds:设定timeout的光阴是seconds秒,假使高出时间,则自动遗弃。

以下crontab布置职责实施前,需获得有的时候文件create.lock 文件锁,crontab安插任务的剧情如下:

1*/10 * * * * (lockf -s -t 0 /tmp/create.lock/usr/bin/python /home/project/cron/create_tab.py >> /home/project/logs/create.log 2>&1)

若首先个实例在10分钟内还没运转完,第3个实例不会运作。小编以前是通过Shell脚本来消灭这几个难题的,比如用while...do循环,然后放在后台施行。但新兴发掘实际用flock或lockf方法特别简易。

附上linux下的flock的用法:

flock (util-linux 2.13-pre7)

Usage: flock [-sxun][-w #] fd#

flock [-sxon][-w #] file [-c] command...

-s --shared Get a shared lock

#分享锁,在定向为某文件的FD上安装分享锁而未释放锁的日子内,其余进程试图在定向为此文件的FD上安装独占锁的伸手战败,而任何进度试图在定向为此文件的FD上安装分享锁的央浼会中标

-x --exclusive Get an exclusive lock

#占领或排他锁,在定向为某文件的FD上安装独自据有锁而未释放锁的时刻内,其余进度试图在定向为此文件的FD上安装分享锁或独占锁都会战败。只要未设置-s参数,此参数私下认可被设置

-u --unlock Remove a lock

#手动解锁,通常意况不必须,当FD关闭时,系统会自行解锁,此参数用于脚本命令生龙活虎部分内需异步实施,黄金年代部分能够协同推行的事态

-n --nonblock Fail rather than wait

#为非阻塞情势,当试图设置锁退步,接纳非阻塞方式,直接回到1,

-w --timeout Wait for a limited amount of time

#安装阻塞超时,当胜过设置的秒数,就跳出阻塞,再次回到1

-o --close Close file descriptor before running command

-c --command Run a single command string through the shell 推行其后的comand

-h --help Display this text

-V --version Display version

举个例证实践如下脚本:

每天23:30的时候实践三个本子,可是履行前务供给拿走排他文件锁,否则无法实施命令

130 23 * * *flock -xn /tmp/test.lock-c '/usr/local/php test.php'

8、; 和 &&区别

“;” 和 “&&”是有分别的

“;”:不管cmd1进行的结果什么,都进行cmd2

“&&”:仅有cmd1试行回来的结果是成功的,才施行cmd2

cmd1 && cmd2; cmd3

- cmd1 is executed, if it succeeds, then executecmd2. and then cmd3 (regardless of cmd2 success or not)

- cmd1 is executed, if it fails, then cmd3 (cmd2 won't be executed)

9、要是遇上shell语法错误

Syntax error: "(" unexpected

解决方法:

需点名shell解释器命令:SHELL=/bin/bash(请参见上边crontab编辑示例SHELL=/bin/bash)

还是参见:LINUX - BASH Syntax Error

假设碰到路线错误

在 /var/spool/crontab/yanggang 中,增多了之类命令,在日记文件 /var/spool/mail/yanggang 中提醒找不到 xxx.sh 路线

30 * * * * /home/barry/top800/top10/top10_fruits/top10_all.sh

30 * * * *bash/home/barry/top800/top10/top10_fruits/top10_all.sh

那是因为您在crontab中运用了相对路线试行脚本top10_all.sh,因而在剧本top10_all.sh中引用的任何脚本也都急需使用相对路线,技术被crontab找到并实行。

那正是说该怎么着制止相对路线呢,推荐使用如下格式:

30 * * * * cd /home/barry/top800/top10/top10_fruits/ && ./top10_all.sh(推荐用此办法)

先步向该目录,然后在实施脚本;不然,实行脚本中的别的脚本都亟需加绝对路径

仿照效法推荐:

CentOS 7.2上 crontab 陈设职责

linux准期运转命令脚本——crontab

CentOS crontab 定期职分不实行的排除

WordPress定期职责(wp-cron.php)产生主机CPU超过规范消除办法

crond 不实行原因是怎么?怎么肃清?,linuxcrond 为了准期监察和控制Linux系统CPU、内部存款和储蓄器、负载的选取状态,写了Linux Shell脚本,当达到自然值得...

凌乱不堪中发掘了四个学习shell的那些好的科目,原原本本看了刹那间,等看完全忘记了,无法只可以记录下来,教程网站

下边针没错是非ubuntu情状,会在小说最终介绍ubuntu的局地组别。

生机勃勃、Shell脚本常用的头顶格式:

shell Shell俗称壳,类似于DOS下的command和新兴的cmd.exe。它接纳顾客命令,然后调用相应的应用程序。作为命令语言,它交互式解释和履行客商输入的授命或许机关地演说和试行预先设定好的各种的吩咐;作为程序设计语言,它定义了各类变量和参数,并提供了广大在高端语言中本领备的调整结构,满含循环和支行。

早先一贯据悉shell很要紧,但是有多种要,上边说了一句话:shell使用的熟稔程度反映了客户对Unix/Linux使用的熟知程度。

在Linux下,日常必要依期的试行一些本子进而来落实部分功力。

头顶的效果与利益便是报告linux此脚本的类型;

自个儿那边是centos6,5 

Shell有二种推行命令的办法:

在Linux下大家用crontab来完成依期的实行脚本这几个功能,上边就介绍一下crontab的使用。以致自己遇见的部分主题素材

常用的头顶格式如下:(/bin/bash,是bash的路径,假诺不驾驭路线能够透过which bash进行查看,此外命令的不二等秘书技也是相像查看的)

接下去 写一个简短的shell命令:

  • 交互式(Interactive):解释执行顾客的授命,客商输入一条命令,Shell就分解奉行一条。
  • 批管理(Batch):客户优先写多少个Shell脚本(Script),在那之中有广大条命令,让Shell二回把那几个命令试行完,而不要一条一条地敲命令。

生龙活虎. crontab的使用表明

  1. crond 是linux用来依期试行顺序的一声令下。当安装达成操作系统之后,暗许便会运营此职分调节命令。crond命令每分钟会按期检查是还是不是有要推行的劳作,要是有要实践的劳作便会自行推行该工作。而linux任务调整的工作第一分为以下两类

a. 系统实行的劳作,比方垃圾清理,备份

b. 顾客自定义的做事,比方每5分钟实行一遍剧本

2. crontab是UNIX系统下为期实践职责的触发器。客商把要限制期限实施的职分记录在这里个文件上边,然后crond准期的去反省那一个期限施行列表,有要实行的劳作时便自行推行。

透过man crontab可以查阅到上边包车型大巴音讯

a. /etc/crond.allow 代表的是允许行使crontab的顾客列表

b. /etc/crond.deny 代表的是不允许利用crontab的客商列表

  1. crontab常用的多少个指令格式

crontab -l //展现顾客的crontab文件的从头到尾的经过

crontab -e //编辑客户的crontab文件的源委

crontab -r //删除客商的crontab文件

  1. crontab文件的基本格式如下所示

*    *     *    *    *       command

分   时   天   月   周         命令

每列表暗中提示义

a. 第一个*代表的是秒钟1~59分钟,默许*代表的是每分钟都施行,x-y代表的是x~y这段每秒钟都实行,*/n表示每n分钟实行二次,x,y,z表示的是x,y,z分钟都进行。

b. 第二个*表示的是小时1~23小时,默认*意味着的是每小时都实践,x-y代表的是x~y这段每时辰都推行,*/n代表每n小时奉行二次,x,y,z表示的是x,y,z时辰都试行。

c. 第三个*意味着的是天1~31,默认*代表的是每一天都实行,x-y表示的是x~y这段每一天都奉行,*/n代表每n天实行三回,x,y,z表示的是x,y,z天都进行。

d. 第四个*表示的是月1~12,默许*表示的是各种月都举办,x-y表示的是x~y这一个段每月都推行,*/n表示每n分钟实施贰遍,x,y,z表示的是x,y,z天都执行。

e. 第五个*意味着的是周0~6(0代表周末),暗中同意周少年老成~周日都实行,x-y表示周x~周y每一天都实施。

  1. crontab文件的风流倜傥部分例子

a. 30 21 * * * /usr/local/etc/rc.d/lighttpd restart //表示每日21:30重启apache

澳门新浦京娱乐场网站Shell脚本使用汇总整理,一个简单的linux下设置定时执行shell脚本的示例。b. 45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart //表示每月1,10,22号4:45重启apache

c. 0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart //表示每一日18 : 00至23 : 00时期每间隔30分钟重启apache

d. * */1 * * * /usr/local/etc/rc.d/lighttpd restart //表示每风流洒脱钟头重启apache

e. */5 * * * * /usr/local/etc/rc.d/lighttpd restart //表示每5分钟重启apache

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

1.使用pwd命令查看当前路线为/root目录

两种普及的shell:bash,sh,ash,csh,ksh,也正是说有那样说的shell脚本解释器。

二. 具体育赛事例

  1. 第生机勃勃自个儿在/home/chenguolin/tmp/ 成立八个shell脚本名称叫s.sh。注意脚本内部的路子使用相对路线。

以此本子的效应便是把近年来的日子输出重定向到当前目录下的out文件

  1. 然后设置每2分钟实行贰次那么些本子,>/dev/null 2>&1。原因是因为系统会在历次施行完职务之后就发三个邮件告诉客商,通过那个操作能够把消息全体重定向到/dev/null中, /dev/null那一个文件相近回收站过生龙活虎段时间系统自动清理。

*/2 * * * * sh /home/chenguolin/tmp/s.sh >/dev/null 2>&1

下一场开掘过了n个2分钟,out文件根本就不曾出口。 

3. 在谷歌(Google)/百度无果之后,问了爱人,获得了原因是因为crontab大概临时候未有主意试行客商家目录下边包车型地铁三个文本,分别是.bashrc和.bash_profile

那四个公文的功能如下

.bashrc功效是用以你的bash shell的bash音讯,当登入时及每一次展开新的shell时,该文件被读取;

.bash_profile成效是各样客户都可应用该公文输入专项使用于本身行使的shell消息,当客户登陆时,该文件仅仅试行一回!暗中认可境况下,他设置有个别情形变量,实践客商的.bashrc文件,

故而大家要手动在crontab文件中增添source /home/chenguolin/.bashrc && source /home/chenguolin/.bash_profile

source的效应是时下bash情况下实践命令,而scripts是开发银行多个子shell来实践命令。那样大器晚成旦把设置情形变量(或alias等 等)的下令写进scripts中,就只会影响子shell,不能够改观近日的BASH,所以经过文件(命令列)设置意况变量时,要用source 命令。

于是crontab文件中成为

*/2 * * * * source && /home/chenguolin/.bashrc && source /home/chenguolin/.bash_profile && sh /home/chenguolin/tmp/s.sh >/dev/null 2>&1

  1. 发觉能够准时的执行脚本。

假设还丰富,那只好通过搜寻log来查错。非ubuntu的Linux crond的日志文件保存在/var/log下

澳门新浦京娱乐场网站 1

澳门新浦京娱乐场网站 2

  • 在写Shell脚本时,往往第后生可畏行要申明用哪些解释器来疏解这一个本子。Shell脚本的日常后缀是.sh
    • 如#!/bin/bash即用/bin/bash那几个解释器来批注接下去的言辞。
    • 还有如#!/bin/csh

三. ubuntu下利用crontab按期进行脚本

注意下多少个难题以

1. ubuntu下crontab的服务程序是cron,何况私下认可cron服务的log是从未有过的,大家必需手动开启

a. sudo vim /etc/rsyslog.d/50-default.conf

b. 找到cron.*那生机勃勃行把注释去掉

c. 然后重启cron服务 sudo service cron restart

d. 那样就可以在/var/log里面发掘存cron的日记文件了,大家就足以经过查阅日志文件找到难题所在

2. ubuntu下,客户家目录下是未曾.bash_profile文件的,而且会自动去试行.bashrc文件,只要写成上边那样就可以

*/2 * * * * sh /home/chenguolin/tmp/s.sh >/dev/null 2>&1

(2)#!/usr/bin/expect:能够活动交互的linux脚本,有非常大可能率供给安装expect,要是linux服务器上未曾此expect命令的话。

2.采取vi编辑器 能够直接 # vim hello.sh编写第贰个shell文件 hello.sh, 注意早晚要以.sh结尾

第一个shell脚本

二、Shell脚本中怎样实行Linux或自定义的本子命令:

澳门新浦京娱乐场网站 3

shell扩充名字为sh(sh代表shell),增加名并不影响脚本施行,

在经常的#!/bin/bash脚本中,实施linux命令,常常要写该命令的全路径,假如不明了全路径的,能够透过which 命令,进行查看全路径,假使急需后台实行,就在命令最终 空格 &。

3.编制第三个shell文件,#!/bin/bash 是必定要写的,表示只要/bin/bash那个实践脚本的吩咐实践接下去写的剧本, echo "hello world !!"表示想前端打字与印刷一句话,具体看个别要求。

#!/bin/bash                            #这一行一定要写,#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种Shell
echo "What is your name?"
read PERSON
echo "Hello World!,$PERSON"

澳门新浦京娱乐场网站 4

澳门新浦京娱乐场网站 5

将上边的代码保存到a.sh中,在该目录下实行

澳门新浦京娱乐场网站 6

4.因而chmod命令授予该脚本的推行权限chmod 755 hello.sh,否则未有举行权限,/root/hello.sh代表在全路径下实行该shell脚本

[spark@nolonely ~]$ chmod  x ./a.sh     #./表示的是当前目录下
[spark@nolonely ~]$ ./a.sh

三、Shell脚本中哪些开展活动交互:

澳门新浦京娱乐场网站 7

变量

万风流罗曼蒂克需求在shell脚本中贯彻活动交互,常常是通过expect实行贯彻的,方便好用,供给潜心的是expect脚本中恐怕是不能够举行一些linux命令的,若是一定供给实行该linxu命令,能够将该Linxu命令写入到二个平铺直叙的shell脚本中去,然后在expect脚本中经过调用试行该linux命令的平凡脚本,进而实现要求;

就此一个简短的shell脚本如同此写完了 具体的此处就不讲了。

概念变量时,变量名不加日币符号

Expect脚本具体写法能够参照以下连接:

纵然一个简便的shell脚本写完了 可是运作后一定要试行三回对广大采用场景来讲依然远远不足,接下去说一下依期职责

注意,变量名和等号之间不能够有空格,这可能和你纯熟的具备编程语言都不雷同。相同的时间,变量名的命名须遵照如下准则:

依期职责 --相信广大同伙没用过也闻讯过吧。

  • 第多少个字符必得为字母(a-z,A-Z)。
  • 中间无法有空格,能够运用下划线(_)。
  • 无法选择标点符号。
  • 不可能应用bash里的首要性字(可用help命令查看保留首要字)。

    #!/bin/bash myUrl="" myNum=10

四、Shell脚本如何定期实践:

那边就不细讲了第一手进去正题

应用变量时,只要在变量名前加卢比符号($)就能够,只有在行使变量的时候加多$

Linux中定期推行shell脚本,能够经过crond进行调控,须要linux中装置crond,并在通过crontab -e命令实行布置,具体参照以下连接:

1.安装crontab 

#!/bin/bash
myUrl="http://www.baidu.com"
myNum=10
echo $myUrl
echo ${myUrl}   #变量名外边的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界

for skill in Ada Coffe Action Java
do
        echo "I am good at ${skill}Script"
done

https://www.cnblogs.com/bcphp/p/7084967.html

澳门新浦京娱乐场网站 8

重新定义变量

设定准期职责:

vixie-cron软件包是cron的主程序; 
crontabs软件包是用来设置、卸装、或列举用来驱动 cron 守护进度的表格的主次。

概念的变量,能够被重复定义,如:

crontab -e 然后加多一条定期义务音讯保存文件 service crond restart

2.开启crontab服务

#!/bin/bash
myUrl="http://www.baidu.com"
echo ${myUrl}
myUrl="nihao" 
echo ${myUrl}

纠正定期任务:

澳门新浦京娱乐场网站 9

像这种类型写是官方的,但只顾,第一回赋值的时候不可能写 $myUrl="nihao",使用变量的时候才加欧元符($)。

crontab -e 然后修改某些准期职分新闻保存文件 service crond restart

用以下的不二诀窍运营、关闭这几个cron服务: 
service crond start //运营服务 
service crond stop //关闭服务 
service crond restart //重启服务 
service crond reload //重新载入配置

只读变量

去除定时职务:

查阅crontab服务场合:service crond status 
手动运行crontab服务:service crond start 

使用 readonly 命令能够将变量定义为只读变量,只读变量的值不能够被改换。
下边包车型的士例证尝试改良只读变量,结果报错:

crontab -e 然后删除有些准期职分音信保存文件即可 service crond restart

澳门新浦京娱乐场网站 10

#!/bin/bash
myUrl="http://www.baidu.com"
readonly myUrl 
myUrl="nihao"

翻看定时职分:

查看crontab服务是或不是已安装为开机运营,推行命令:ntsysv 
出席开机自动运营: 
chkconfig –level 35 crond on

运维脚本,结果如下:

crontab -l

也得以用设置开机自动运行crond服务: 
[root@CentOS ~]# chkconfig crond on 

/bin/sh: NAME: This variable is read only.

五、脚本中常用功用:

澳门新浦京娱乐场网站 11

删去变量

1、定义变量:

翻开各种开机等第的crond服务运作情状 
[root@CentOS ~]# chkconfig –list crond 
crond 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭 
能够看看2、3、4、5等级开时机自动运转crond服务 
撤销开机自动运行crond服务: 
[root@CentOS ~]# chkconfig crond off

使用 unset 命令能够去除变量。变量被剔除后不能够重复行使;unset命令无法去除只读变量。

变量名 等号 值(借使是非数字的提议加上双引号)

3.安装必要推行的剧本 

#!/bin/sh
myUrl="http://www.baidu.com"
unset myUrl
echo $myUrl   #没有任何输出

澳门新浦京娱乐场网站 12

新扩充调整职责可用两种方式: 
1)、在命令行输入: crontab -e 然后加多相应的任务,wq存盘退出。 
2)、直接编辑/etc/crontab 文件,即vi /etc/crontab,加多相应的天职。 
crontab -e配置是指向某些顾客的,而编辑/etc/crontab是针对系统的职分 
查阅调治职务 
crontab -l //列出当下的持有调治任务 
澳门新浦京娱乐场网站Shell脚本使用汇总整理,一个简单的linux下设置定时执行shell脚本的示例。crontab -l -u jp //列出客商jp的装有调解任务 
删除职分调解专门的学业 
crontab -r //删除全数职务调整职业 
直白编辑 vim /etc/crontab ,暗中认可的文本情势如下:

变量类型:

2、获取变量:

 

运行shell时,会相同的时候存在两种变量:

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

澳门新浦京娱乐场网站 13

1) 局地变量

(2)${变量名}:提出用此措施,变量名有水落石出的界限;

前四行是有关设置cron职责局营的景况变量。SHELL变量的值内定系统接受的SHELL景况(该样例为bash shell),PATH变量定义了实施命令的门道。Cron的输出以电子邮件的花样发放MAILTO变量定义的客户名。假若MAILTO变量定义为空字符串(MAILTO=""),电子邮件不会被发送。实行命令或脚本时HOME变量可用来设置基目录。

黄金年代对变量在剧本或指令中定义,仅在时下shell实例中央银一蹴而就,别的shell运转的主次无法访问片段变量。

3、定义数组:

文本/etc/crontab中每行职分的陈述格式如下: 

2) 蒙受变量

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

 

具有的顺序,包涵shell运行的顺序,都能访问情形变量,有个别程序必要意况变量来确认保障其健康运作。供给的时候shell脚本也足以定义情形变量。

澳门新浦京娱乐场网站 14

minute hour day month dayofweek command

3) shell变量

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

 

shell变量是由shell程序设置的异样变量。shell变量中有风度翩翩部分是情形变量,有风流浪漫部分是有的变量,那个变量保险了shell的正规运作

${数组名[角标]}:此方法可以赢得有些数组中某些角标的值

minute - 从0到59的整数 

Shell特殊变量:Shell $0, $#, $*, $@, $?, $$和命令行参数

 变量 含义
$0 当前脚本的文件名
$n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。
$# 传递给脚本或函数的参数个数。
$* 传递给脚本或函数的所有参数。
$@ 传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同,下面将会讲到。
$? 上个命令的退出状态,或函数的返回值。
$$ 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。
#!/bin/bish
echo "File Name: $0" 这个$0表示的是脚本名本身
echo "First Parameter : $1" 这个$1表示的是执行脚本的第一个参数,就是Zara
echo "Second Parameter : $2" 这个$2表示的是执行脚本的第二个参数,就是Ali
echo "Quoted Values: $@"
echo "Quoted Values: $*"
echo "Total Number of Parameters : $#" $#表示的是参数个数

运营结果:

$./test.sh Zara Ali
File Name : ./test.sh
First Parameter : Zara
Second Parameter : Ali
Quoted Values: Zara Ali
Quoted Values: Zara Ali
Total Number of Parameters : 2

$* 和 $@ 的区别

$* 和 $@ 都意味着传递给函数或脚本的具备参数,不被双引号(" ")包含时,都是"$1" "$2" … "$n" 的情势出口全数参数。

而是当它们被双引号(" ")包括时,"$*" 会将具备的参数作为多个平安无事,以"$1 $2 … $n"的方式出口全部参数;"$@" 会将逐个参数分开,以"$1" "$2" … "$n" 的款式出口全体参数。

上边包车型大巴例证能够清楚的见到 $* 和 $@ 的区别:

    #!/bin/bash
    echo "$*=" $*
    echo ""$*"=" "$*"
    echo "$@=" $@
    echo ""$@"=" "$@"
    echo "print each param from $*"
    for var in $*
    do
        echo "$var"
    done
    echo "print each param from $@"
    for var in $@
    do
        echo "$var"
    done
    echo "print each param from "$*""
    for var in "$*"
    do
        echo "$var"
    done
    echo "print each param from "$@""
    for var in "$@"
    do
        echo "$var"
    done

进行 ./test.sh "a" "b" "c" "d",见到上边包车型大巴结果:

$*=  a b c d
"$*"= a b c d
$@=  a b c d
"$@"= a b c d
print each param from $*
a
b
c
d
print each param from $@
a
b
c
d
print each param from "$*"
a b c d
print each param from "$@"
a
b
c
d

除却,还应该有三个,不过本人还未有曾弄明白:

  1. $echo $$    #代表最近shell进度的ID数,作者把它一贯放在四个sh脚本文件中会报错,,
  2. $? 能够获得上贰个发令的退出状态。所谓退出状态,正是上贰个限令实施后的回到结果。   #晋升命令未有找到

5、获取当今日期:

hour - 从0到23的整数 

Shell替换:Shell变量替换,命令替换,转义字符

假诺表明式中包涵特殊字符,Shell 将会开展替换。举个例子,在双引号中接受变量正是风姿洒脱种替换,转义字符也是大器晚成种替换。

下边包车型客车转义字符都可以用在 echo 中:

 转义字符 含义
\ 反斜杠
a 警报,响铃
b 退格(删除键)
f 换页(FF),将当前位置移到下页开头
n 换行
r 回车
t 水平制表符(tab键) 
v 垂直制表符

 

举个例证:

#!/bin/bash
a=10
echo -e "Value of a is $a n"

运行结果:

Value of a is 10

那边 -e 表示对转义字符实行替换。如若不行使 -e 选项,将会原样输出:

Value of a is 10n

能够动用 echo 命令的 -E 选项制止转义,暗许也是不转义的;使用 -n 选项可防止止插入换行符

命令替换

命令替换是指Shell可以先推行命令,将出口结果临时保留,在相符的地点输出。

#!/bin/bash
DATE=`date`
echo "Date is $DATE"
USERS=`who | wc -l`
echo "Logged in user are $USERS"
UP=`date ; uptime`
echo "Uptime is $UP"

运维结果是:

澳门新浦京娱乐场网站 15

变量替换

变量替换能够依赖变量的意况(是还是不是为空、是不是定义等)来改动它的值

能够使用的变量替换情势:

 

形式 说明
${var} 变量本来的值
${var:-word} 如果变量 var 为空或已被删除(unset),那么返回 word,但不改变 var 的值。
${var:=word} 如果变量 var 为空或已被删除(unset),那么返回 word,并将 var 的值设置为 word。
${var:?message} 如果变量 var 为空或已被删除(unset),那么将消息 message 送到标准错误输出,可以用来检测变量 var 是否可以被正常赋值。
若此替换出现在Shell脚本中,那么脚本将停止运行。
${var: word} 如果变量 var 被定义,那么返回 word,但不改变 var 的值。

 例子:

#!/bin/bash
#总结一下,减号“—”和加号“ ”分别是当变量无定义和有定义的时候返回Word,都不改变var;等于号“=”,不管有没有定义,都给var重新赋值,并返回Word;对于问号“?”,当变量没有定义的时候直接输出message并且退出,当变量有定义的时候,不执行任何操作,相当于直接跳过了

echo ${var:-"Variable is not set"}
echo "1 - Value of var is ${var}"

echo ${var:="Variable is not set"}
echo "2 - Value of var is ${var}"

unset var
echo ${var: "This is default value"}
echo "3 - Value of var is $var"

var="Prefix"
echo ${var: "This is default value"}
echo "4 - Value of var is $var"

echo ${var:?"Print this message"}
echo "5 - Value of var is ${var}"

运维结果:

Variable is not set
1 - Value of var is
Variable is not set
2 - Value of var is Variable is not set
3 - Value of var is
This is default value
4 - Value of var is Prefix
Prefix
5 - Value of var is Prefix

澳门新浦京娱乐场网站 16

day - 从1到31的卡尺头 (必得是钦点月份的得力日期)

Shell运算符:Shell算数运算符、关系运算符、布尔运算符、字符串运算符等

原生bash不扶持简单的数学生运动算,但是足以经过别的命令来落到实处,举个例子awk 和 expr,expr 最常用。

expr 是风度翩翩款表达式总计工具,使用它能成就表达式的求值操作。

五个数相加:

#!/bin/bash
val=`expr 2   2`
echo "Total value : $val"

结果为:

Total value : 4

两点注意:

  • 表明式和运算符之间要有空格,比如 2 2 是语无伦次的,必需写成 2 2,那与大家耳濡目染的大多数编制程序语言不等同。
  • 风度翩翩体化的表明式要被 ` ` 包含,注意这几个字符不是常用的单引号,在 Esc 键上边。

算术运算符

例子:

#!/bin/sh
a=10
b=20
val=`expr $a   $b`
echo "a   b : $val"
val=`expr $a - $b`
echo "a - b : $val"
val=`expr $a * $b`
echo "a * b : $val"
val=`expr $b / $a`
echo "b / a : $val"
val=`expr $b % $a`
echo "b % a : $val"
if [ $a == $b ]
then
   echo "a is equal to b"
fi
if [ $a != $b ]
then
   echo "a is not equal to b"
fi

运维结果:

a   b : 30
a - b : -10
a * b : 200
b / a : 2
b % a : 0
a is not equal to b

注意:乘号(*)后面必需加反斜杠()技艺落到实处乘法运算;

运算符 说明 举例
加法 `expr $a $b` 结果为 30。
- 减法 `expr $a - $b` 结果为 10。
* 乘法 `expr $a * $b` 结果为  200。
/ 除法 `expr $b / $a` 结果为 2。
% 取余 `expr $b % $a` 结果为 0。
= 赋值 a=$b 将把变量 b 的值赋给 a。
== 相等。用于比较两个数字,相同则返回 true。 [ $a == $b ] 返回 false。
!= 不相等。用于比较两个数字,不相同则返回 true。 [ $a != $b ] 返回 true。

留心:条件表明式要放在方括号之间,何况要有空格,比如 [$a==$b] 是不没有错,必需写成 [ $a == $b ]。

关系运算符

涉嫌运算符只资助数字,不帮助字符串,除非字符串的值是数字。

例子

#!/bin/sh
a=10
b=20
if [ $a -eq $b ]
then
   echo "$a -eq $b : a is equal to b"
else
   echo "$a -eq $b: a is not equal to b"
fi
if [ $a -ne $b ]
then
    echo "$a -ne $b: a is not equal to b"
else
    echo "$a -ne $b : a is equal to b"
fi
if [ $a -gt $b ]
then
    echo "$a -gt $b: a is greater than b"
else
    echo "$a -gt $b: a is not greater than b"
fi
if [ $a -lt $b ]
then
    echo "$a -lt $b: a is less than b"
else
    echo "$a -lt $b: a is not less than b"
fi
if [ $a -ge $b ]
then
    echo "$a -ge $b: a is greater or  equal to b"
else
    echo "$a -ge $b: a is not greater or equal to b"
fi
if [ $a -le $b ]
then
    echo "$a -le $b: a is less or  equal to b"
else
    echo "$a -le $b: a is not less or equal to b"
fi

结果

10 -eq 20: a is not equal to b
10 -ne 20: a is not equal to b
10 -gt 20: a is not greater than b
10 -lt 20: a is less than b
10 -ge 20: a is not greater or equal to b
10 -le 20: a is less or  equal to b

论及运算符列表

运算符 说明 举例
-eq 检测两个数是否相等,相等返回 true。 [ $a -eq $b ] 返回 true。
-ne 检测两个数是否相等,不相等返回 true。 [ $a -ne $b ] 返回 true。
-gt 检测左边的数是否大于右边的,如果是,则返回 true。 [ $a -gt $b ] 返回 false。
-lt 检测左边的数是否小于右边的,如果是,则返回 true。 [ $a -lt $b ] 返回 true。
-ge 检测左边的数是否大等于右边的,如果是,则返回 true。 [ $a -ge $b ] 返回 false。
-le 检测左边的数是否小于等于右边的,如果是,则返回 true。 [ $a -le $b ] 返回 true。

布尔运算符

例子:

#!/bin/sh
a=10
b=20
if [ $a != $b ]
then
   echo "$a != $b : a is not equal to b"
else
   echo "$a != $b: a is equal to b"
fi
if [ $a -lt 100 -a $b -gt 15 ]
then
   echo "$a -lt 100 -a $b -gt 15 : returns true"
else
   echo "$a -lt 100 -a $b -gt 15 : returns false"
fi
if [ $a -lt 100 -o $b -gt 100 ]
then
   echo "$a -lt 100 -o $b -gt 100 : returns true"
else
   echo "$a -lt 100 -o $b -gt 100 : returns false"
fi
if [ $a -lt 5 -o $b -gt 100 ]
then
   echo "$a -lt 100 -o $b -gt 100 : returns true"
else
   echo "$a -lt 100 -o $b -gt 100 : returns false"
fi

结果:

10 != 20 : a is not equal to b
10 -lt 100 -a 20 -gt 15 : returns true
10 -lt 100 -o 20 -gt 100 : returns true
10 -lt 5 -o 20 -gt 100 : returns false

布尔运算符列表

运算符 说明 举例
! 非运算,表达式为 true 则返回 false,否则返回 true。 [ ! false ] 返回 true。
-o 或运算,有一个表达式为 true 则返回 true。 [ $a -lt 20 -o $b -gt 100 ] 返回 true。
-a 与运算,两个表达式都为 true 才返回 true。 [ $a -lt 20 -a $b -gt 100 ] 返回 false。

6、获取几天前天期:

month - 从1到12的子弹头 (或如Jan或Feb简写的月份)

字符串运算符

运算符 说明 举例
= 检测两个字符串是否相等,相等返回 true。 [ $a = $b ] 返回 false。
!= 检测两个字符串是否相等,不相等返回 true。 [ $a != $b ] 返回 true。
-z 检测字符串长度是否为0,为0返回 true。 [ -z $a ] 返回 false。
-n 检测字符串长度是否为0,不为0返回 true。 [ -n $a ] 返回 true。
str 检测字符串是否为空,不为空返回 true。 [ $a ] 返回 true。

例子

#!/bin/sh
a="abc"
b="efg"
if [ $a = $b ]
then
   echo "$a = $b : a is equal to b"
else
   echo "$a = $b: a is not equal to b"
fi
if [ $a != $b ]
then
   echo "$a != $b : a is not equal to b"
else
   echo "$a != $b: a is equal to b"
fi
if [ -z $a ]    #if [-z $a]最好写成这样:if [-z "$a"],因为如果$a是带空格的字符串时,shell会报错:too many arguments
then
   echo "-z $a : string length is zero"
else
   echo "-z $a : string length is not zero"
fi
if [ -n $a ]
then
   echo "-n $a : string length is not zero"
else
   echo "-n $a : string length is zero"
fi
if [ $a ]
then
   echo "$a : string is not empty"
else
   echo "$a : string is empty"
fi

结果:

abc = efg: a is not equal to b
abc != efg : a is not equal to b
-z abc : string length is not zero
-n abc : string length is not zero
abc : string is not empty

澳门新浦京娱乐场网站 17

dayofweek - 从0到7的整数,0或7用来描述周末 (或用Sun或Mon简写来代表)

文本测量试验运算符

操作符  说明 举例
-b file 检测文件是否是块设备文件,如果是,则返回 true。 [ -b $file ] 返回 false。
-c file 检测文件是否是字符设备文件,如果是,则返回 true。 [ -b $file ] 返回 false。
-d file 检测文件是否是目录,如果是,则返回 true。 [ -d $file ] 返回 false。
-f file 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。 [ -f $file ] 返回 true。
-g file 检测文件是否设置了 SGID 位,如果是,则返回 true。 [ -g $file ] 返回 false。
-k file 检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。 [ -k $file ] 返回 false。
-p file 检测文件是否是具名管道,如果是,则返回 true。 [ -p $file ] 返回 false。
-u file 检测文件是否设置了 SUID 位,如果是,则返回 true。 [ -u $file ] 返回 false。
-r file 检测文件是否可读,如果是,则返回 true。 [ -r $file ] 返回 true。
-w file 检测文件是否可写,如果是,则返回 true。 [ -w $file ] 返回 true。
-x file 检测文件是否可执行,如果是,则返回 true。 [ -x $file ] 返回 true。
-s file 检测文件是否为空(文件大小是否大于0),不为空返回 true。 [ -s $file ] 返回 true。
-e file 检测文件(包括目录)是否存在,如果是,则返回 true。 [ -e $file ] 返回 true。

文件测量检验运算符用于检查实验Unix 文件的各类质量。

举例,变量 file 表示文件“/var/www/tutorialspoint/unix/test.sh”,它的大大小小为100字节,具备rwx 权限。下边包车型客车代码,将检查测试该文件的各类质量:

#!/bin/sh
file="/var/www/tutorialspoint/unix/test.sh"
if [ -r $file ]
then
   echo "File has read access"
else
   echo "File does not have read access"
fi
if [ -w $file ]
then
   echo "File has write permission"
else
   echo "File does not have write permission"
fi
if [ -x $file ]
then
   echo "File has execute permission"
else
   echo "File does not have execute permission"
fi
if [ -f $file ]
then
   echo "File is an ordinary file"
else
   echo "This is sepcial file"
fi
if [ -d $file ]
then
   echo "File is a directory"
else
   echo "This is not a directory"
fi
if [ -s $file ]
then
   echo "File size is zero"
else
   echo "File size is not zero"
fi
if [ -e $file ]
then
   echo "File exists"
else
   echo "File does not exist"
fi

结果:

File has read access
File has write permission
File has execute permission
File is an ordinary file
This is not a directory
File size is zero
File exists

7、获取几天今天期:

command - 须要举办的一声令下(可用as ls /proc >> /tmp/proc或 试行自定义脚本的命令) 

Shell注释

以“#”最初的行正是注释,会被解释器忽视。

sh里没有多行注释,只可以每生龙活虎行加二个#号。

假设在支付进度中,境遇大段的代码要求近年来注释起来,过会儿又废除注释,如何做吧?每意气风发行加个#标志太讨厌了,能够把那生机勃勃段要批注的代码用生机勃勃对花括号括起来,定义成二个函数,未有地点调用那么些函数,那块代码就不会实施,达到了和注释同样的职能。

将几天的数字更改为负数就可以

 

Shell字符串

字符串是shell编制程序中最常用最有效的数据类型(除了数字和字符串,也没啥此外品类好用了),字符串能够用单引号,也能够用双引号,也得以绝不引号。单双引号的界别跟PHP相似。

单引号

str='this is a string'

单引号字符串的限量:

  • 单引号里的别的字符都会原样输出,单引号字符串中的变量是行不通的;
  • 单引号字串中不可能冒出单引号(对单引号使用转义符后也特别)。

双引号

your_name='qinjx'
str="Hello, I know your are "$your_name"! n"

双引号的长处:

  • 双引号里能够有变量
  • 双引号里能够现身转义字符

拼接字符串

your_name="qinjx"
greeting="hello, "$your_name" !"
greeting_1="hello, ${your_name} !"
echo $greeting $greeting_1

获取字符串长度

string="abcd"
echo ${#string} #输出 4

领到子字符串

string="alibaba is a great company"
echo ${string:1:4} #输出liba

查找子字符串

string="alibaba is a great company"
echo `expr index "$string" is`  #echo `expr index "$string" company`是在$string里查找company里的任一字符,返回最早出现的位置,1是company里a的位置;
                                    #反引号· · 里的内容被认为是命令,里面$string不需要加” “也能使用,但是变量的内容会被当作命令执行

8、增强for循环:

root代表以root客户身份来运维

Shell数组:shell数组的概念、数CEO度

bash补助大器晚成维数组(不帮衬多维数组),而且没有节制数组的尺寸。相似与C语言,数组成分的下标由0开始编号。获取数组中的成分要使用下标,下标可以是整数或算术表达式,其值应超过或等于0。

概念数组

在Shell中,用括号来表示数组,数组成分用“空格”符号分割开。定义数组的平时方式为:
    array_name=(value1 ... valuen)
例如:

array_name=(value0 value1 value2 value3)

或者

array_name=(
value0
value1
value2
value3
)

还是能够独自定义数组的逐一分量:

array_name[0]=value0
array_name[1]=value1
array_name[2]=value2

可以不选用三回九转的下标,何况下标的界定未有范围。

port是数组名,${!port[@]}重临该数组全数下标

读取数组

读取数组成分值的貌似格式是:
    ${array_name[index]}
例如:

valuen=${array_name[2]}

比如:

#!/bin/sh
NAME[0]="Zara"
NAME[1]="Qadir"
NAME[2]="Mahnaz"
NAME[3]="Ayan"
NAME[4]="Daisy"
echo "First Index: ${NAME[0]}"
echo "Second Index: ${NAME[1]}"

运行脚本,输出:

$./test.sh
First Index: Zara
Second Index: Qadir

使用@ 或 * 能够获得数组中的全部因素,比如:

${array_name[*]}
${array_name[@]}

比如:

#!/bin/sh
NAME[0]="Zara"
NAME[1]="Qadir"
NAME[2]="Mahnaz"
NAME[3]="Ayan"
NAME[4]="Daisy"
echo "First Method: ${NAME[*]}"
echo "Second Method: ${NAME[@]}"

运营脚本,输出:

$./test.sh
First Method: Zara Qadir Mahnaz Ayan Daisy
Second Method: Zara Qadir Mahnaz Ayan Daisy

得到数组的长短

获取数老总度的章程与收获字符串长度的议程相似,比方:

# 取得数组元素的个数
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
# 取得数组单个元素的长度
lengthn=${#array_name[n]}

澳门新浦京娱乐场网站 18

run-parts表示前边随着的是贰个文件夹,要试行的是该文件夹下的享有脚本

9、普通for循环:

对于上述各语句,星号(*)表示全数可用的值。比如*在代表month时表示每月实践(须要符合别的约束条件)该命令。 

澳门新浦京娱乐场网站 19

大背头间的连字号(-)表示整数列,比如1-4野趣是整数1,2,3,4

10、输出音信:

钦赐数值由逗号分开。如:3,4,6,8意味着那四个钦定整数。

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

标识“/”钦命步进设置。“/<interger>”表示步进值。如0-59/2定义每两分钟奉行一次。步进值也可用星号表示。如*/3用来运维每5个月份运维内定职务。

11、字符串拼接:

 

直白变量加字符串拼接就行,无需有 ;

以“#”领头的为注释行,不会被推行。

澳门新浦京娱乐场网站 20

 举个例子上述图中 试行的是每间距一分钟实践八分之四hello.sh脚本 上边脚本输出的内容 我们也知道   >> 符号 钦命文件获取内容的贮存地点 譬如访谈四个地方命令 curl  

12、字符串剪切:

linux系统字符界面 无法出示画面只可以把会见的页面编写翻译后的代码原样输出 如:

(1)从左边第几个字符领头,截取多少个字符:

澳门新浦京娱乐场网站 21

澳门新浦京娱乐场网站 22

那般大家望着很乱吧

(2)从左边第多少个字符起始,一向到停止:

理之当然也会有-I 参数 静默访谈  curl -I

澳门新浦京娱乐场网站 23

澳门新浦京娱乐场网站 24

(3)从侧面第多少个字符开头,截取多少个字符:

这般只彰显意气风发组http状态 但依旧很乱 直接把她写进固定的日志文件就有助于多了 

澳门新浦京娱乐场网站 25

cat 一下 查看  那样就归纳多了

(4)从侧面第多少个字符早先,一贯到告竣:

澳门新浦京娱乐场网站 26

澳门新浦京娱乐场网站 27

就此三个简练的准时职责就瓜熟蒂落了 

13、字符串分隔:

如感觉何地不对的 直接评价或留言。

澳门新浦京娱乐场网站 28

 

14、条件推断if:

澳门新浦京娱乐场网站 29

15、常用的运算符:

(1)算数运算符:

澳门新浦京娱乐场网站 30

(2)关系运算符:

澳门新浦京娱乐场网站 31

(3)布尔运算符:

澳门新浦京娱乐场网站 32

(4)字符串运算符:

澳门新浦京娱乐场网站 33

(5)文件测验运算符:

澳门新浦京娱乐场网站 34

16、读取文件中的数据存款和储蓄到贰个数组中去:

澳门新浦京娱乐场网站 35

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

注意:文件中的值必需即使键值对的款式,并且第一列中的名称常常是定死的,无法随随意便改良;

非常重要思路:

(1)首先通过一回读取两列的原委存款和储蓄到七个数组中去;

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

(3)在要求的时候,能够从map中通过输入有些key值获取其value值;

默许是用空格分列的:

澳门新浦京娱乐场网站 36

内定分列的暗记为“=”:

澳门新浦京娱乐场网站 37

18、推断四个文书是或不是留存:

决断文件使用:-f

澳门新浦京娱乐场网站 38

19、推断三个文件夹是还是不是留存:

判断文件夹使用-d

澳门新浦京娱乐场网站 39

20、定义二个map以致广大使用情势:

设若()中一向不内容,那正是八个空map;

澳门新浦京娱乐场网站 40

别的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=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输出信息和那么些音信

澳门新浦京娱乐场网站 41

二、脚本中打字与印刷日志音讯,制作脚本实行日志文件:

在编排脚本进程中,关键的步骤点,能够通过echo打字与印刷日志音讯到桌面显示器中。平日编写的shell脚本都是内需准时推行的,日常经过crond就能够轻易的贯彻shell脚本的按时实践,透过crontab -e编写准时职分的时候,一定要记住,将shell脚本中打字与印刷日志的音讯重定向到多个文本中去,那样就可以通过观看此文件中的日志音讯来察看shell是还是不是健康运营了。

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

澳门新浦京娱乐场网站 42

澳门新浦京娱乐场网站 43

crond中设定按期义务时,重定向的日记文件,最棒是在一个文件夹下,每趟输出八个文书,那样文件增多一个日子就足以轻巧消除,今后也利于查看日志:文件名_日期.txt:

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

丰盛介怀:日志格式化中用的是斜号(Esc下边那么些键),不是单引号;

 

 

 

 

本文由澳门新浦京娱乐场网站发布于澳门新浦京娱乐场网站,转载请注明出处:澳门新浦京娱乐场网站Shell脚本使用汇总整理,一