Linux定时任务和Shell

[TOC]目录
目录生成脚本地址://www.greatytc.com/p/caa21e6796bd

一、Linux中Shell

1、Shell是什么

Shell是一个命令行解释器,为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,可以用Shell来启动、挂起、停止、编写一些程序。

2、Shell脚本的执行方式

脚本格式要求

  • 脚本以 #!/bin/bash 开头
  • 脚本需要有 执行权限

范例

#!/bin/bash
echo "hello world!"

执行方式

  • 方式一
    • 给 xx.sh 赋予 +x 的权限
    • 执行脚本
  • 方式二
    • sh xx.sh

1.Shell变量

  • 变量分为:系统变量和自定义变量。
  • 系统变量:【$HOME]、$PWD 、$USER 等 : 区分大小写
  • 显示当前 shell 中所有变量 : set

定义

  • 定义变量:变量=值
  • 撤销变量:unset 变量
  • 申明静态变量:readonly 变量, 不能执行 unset

2.变量定义规则

  • 变量由 字母、数字、和下划线组成,不能以 数字开头。
  • 等号两侧不能有空格
  • 变量名称一般大写

==使用 ``==

A=`ls -la` :把执行结果 返回给变量 A
====================
A=$(ls -la)

3.设置环境变量

  • export 变量名=变量值:将shell变量输出为环境变量
  • export 配置文件:让修改后的配置文件生效
  • export $变量名:查询环境变量的值

位置参数变量

n :\0 代表 命令本身;$1 – $9 :第一个到第九个参数,10及以上的参数,用 ${10}

$* :代表命令行中的所有参数, 看成一个整体

$@ :代表命令行中的所有参数,会把每个参数区分开

$# :代表命令行中所有参数的个数

echo "$0 $1 $2"
echo "$*"
echo "$@"
echo "参数个数=$#"
================
./position.sh 30 60
30 60
30 60
参数个数=2

预定义变量

Shell中已经定义好的变量,可以直接使用

$$:当前进程的PID

$!:后台运行的最后一个进程的PID

$?:最后一次执行的命令的返回状态。如果为0,表示上一个命令正确执行。

4.Shell运算符

  • ((运算符)) || \[运算符]

  • expr m + n : 运算符之间 有空格

  • expr m - n

  • 计算 (2+3)*4

#!/bin/bash
echo "hello"
RESULT1=$(((2+3)*4))
echo "result1=$RESULT1"
RESULT2=$[(2 + 3) * 4]
echo "result2=$RESULT2"
TEMP=`expr 2 + 3`
RESULT3=`expr $TEMP \* 4`
echo "result3=$RESULT3"

5.Shell判断语句

[ condition ] :condition前后有空格

  • [ 1 ] :true
  • [] : false
  • [ condition ] && echo 123 || echo 234

6.常用判断条件

  • 数字的比较
= 字符串比较
-lt 小于
-le 小于等于
-eq 等于
-gt 大于
-ge 大于等于
-ne 不等
  • 按照文件权限判断
-r 有读的权限
-w 有写的权限
-x 有执行的权限
  • 按照文件类型判断
-f 文件存在并且是一个常规文件
-e 文件存在
-d 文件存在且是一个目录

3、Shell流程控制

If 语句

if [ condition ]
    then XXX
elif [ condition ]
    then xxx
fi

示例

if [ "ok" = "ok" ]
    then echo "ok==ok"
fi

if [ 23 -gt 22 ]
    then echo "gt"
fi

if [ -e /root/shell/aaa.txt ]
    then echo "exist"
fi

case 语句

case $变量名 in
"值1")
    echo "aaa";;
"值2")
    echo "bbb";;
*)
    echo "ccc";;
esac
#!/bin/bash
case $1 in
"1")
        echo "aaa";;
"2")
        echo "bbb";;
*)
        echo "ccc";;
esac
------------------
./xx.sh 1

for 语句

for 变量 in 值1 值2 值3 ....
do
    xxxx
done

for ((初始值; 循环控制条件;变量变化))
do
    xxxx
done

示例

for i in "$*"
do
    echo "num is $i"
done
# 只会打印一次,所有参数当成一个
===================
for j in "$@"
do
    echo "num is $J"
done
# 多个参数会打印多行
#!/bin/bash
SUM=0
for((i=1;i<=100;i++))
do
        SUM=$[$SUM+$i]
done
echo "SUM=$SUM"

while语句

while [ condition ]
do
    xxxx
done
#!/bin/bash
SUM=0
i=0
while [ $i -le $1 ]
do
        SUM=$[$SUM+$i]
        i=$[$i+1]
done
echo "SUM=$SUM"

Shell输入输出

read (选项)(参数):从控制台读取数据
-p:指定读取值时的提示符
-t:指定读值的等待时间【单位:秒】,超时不等待

参数:指定读取值的变量名
#!/bin/bash

read -p "input a number:" NUM1
echo "num1=$NUM1"

read -t 5 -p "在5秒内,输入一个数num=" NUM2
echo "num=$NUM2"

Shell函数

系统函数

1)basename:返回完整路径最后 / 的部分,常用于获取文件名

basename [pathname] [suffix]

basename /home/aaa/test.txt => test.txt
basename /home/aaa/test.txt .txt => test

2)dirname:返回完整路径最后 / 的前面部分,常用于获取路径

dirname 文件绝对路径

diename /home/aaa/test.txt ==>/home/aaa

自定义函数

语法

[function] funcName[()]
{
    action;
    [return int;]
}

示例

function getSum() {
    SUM=$[$n1 + $n2]
    echo "sum=$SUM"
}
read -p "first num1=" n1
read -p "second num2=" n2

getSum $n1 $n2

案例

需求:

  • 每天凌晨 2 点 0分,备份数据库 testdb 到 /data/backup/db
  • 备份开始和结束给出提示信息
  • 备份好的文件要求以 备份时间为文件名,并打包 .tar.gz 格式:2019-02-23-09-02-01.tar.gz
  • 同时检查 是否有超过10天的备份文件,有就执行删除操作
# 数据库定时备份 脚本
BACKUP_PATH=/data/backup/db
DATETIME=$(date +%Y-%m-%d-%H-%M-%S)
# echo "date=$DATETIME"

echo "========备份开始========="
echo "========备份路径=$BACKUP_PATH/$DATETIME.tar.gz==========="

HOST=localhost
USER=root
PWD=root
DB=testdb

# 如果路径不存在就新建
[ ! -d "$BACKUP_PATH/$DATETIME" ] && mkdir -p $BACKUP_PATH/$DATETIME

# 执行备份命令
mysqldump -u$USER -p$PWD --host=$HOST $DB | gzip > $BACKUP_PATH/$DATETIME/$DATETIME.sql.gz

cd $BACKUP_PATH
tar -zcvf $DATETIME.tar.gz $DATETIME

# 删除临时文件
rm -rf $BACKUP_PATH/$DATETIME

# 找10天前文件,并删除
find $BACKUP_PATH -mtime +10 -name "*.tar.gz" -exec rm -rf {} \;

# 输出备份结束信息
echo "==========备份成功==========="
  • crontab -e
  • 0 2 * /xxx.sh

二、Linux定时任务调度

crond任务调度

系统在某个时间段执行特定的命令或程序。

1、数据库的定时备份操作。

2、系统一些重复工作,病毒扫描等。

用法

crontab 【选项】

-e:编辑crontab定时任务

-l:查询crontab任务

-f:删除当前用户所有的crontab任务

-r:终止任务调度

service crond restart:重启任务调度

crontab -e
*/1 * * * * ls -l /etc > /tmp/to.txt  -- 每小时的每分钟执行
  • 第一个*:一小时中的第几分钟【0-59】
  • 第二个*:一天中的第几个小时【0-23】
  • 第三个*:一个月当中的第几天【1-31】
  • 第四个*:一年中的的第几月【1-12】
  • 第五个*:一周当中对的星期几【0-7 0和7都表示 周日】
特殊符号 说明
* 代表任意时间
不连续的时间范围,0 8,12,15 *,每天8、12、15点执行。
- 连续的时间范围,0 5 1-6,周一到周六的凌晨5点执行。
*/n 每隔多久执行一次,/10 *,每隔10分钟执行一次。

示例

示例 含义
45 22 * 每天22点45分执行
0 17 1 每周一的17点0分执行
0 5 1,15 每月1、15号的凌晨5点0分执行
40 4 1-5 每周一到周五凌晨4点40分执行
/10 4 每天凌晨4点,每隔10分钟执行一次。5点就不执行了
0 0 1,15 * 1 每月1、15号、每周一的0点0分执行

实际操作

1、每隔1分钟,当前日期信息,写入 文件中。

  • vim /home/wsw/mytask1.sh
    • date >> /home/wsw/dates.txt
  • 给mytask1.sh 执行权限
    • chmod 744 /home/wsw/mytask1.sh
  • crontab -e
  • /1 * /home/wsw/mytask1.sh

2、每天凌晨2点,mysql数据库 testdb、备份。

  • vim /home/wsw/mytask2.sh
    • /usr/local/mysql/bin/mysqldump -u root -proot testdb > /tmp/db.bak
  • chmod 744 /home/wsw/mytask2.sh
  • crontab -e
  • 0 2 * /home/wsw/mytask2.sh
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,454评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,553评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,921评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,648评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,770评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,950评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,090评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,817评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,275评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,592评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,724评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,409评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,052评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,815评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,043评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,503评论 2 361
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,627评论 2 350