xml地图|网站地图|网站标签 [设为首页] [加入收藏]
脚本入门,计划任务
分类:操作系统

图片 1

shell script 是三个程序化脚本,使用shell语法跟linux命令完结的一个前后相继。

1、简介

 

注意事项:

2、read

安排职责

  文件开头: #!/bin/bash

3、运算工具

缘何要设置陈设任务

  我们在系统的关押中,比超多时候不是立时的去操作,比如对某一网址数量的备份,备份的进程须求占用大批量的系统财富,上午三四点的时候系统访谈客商最少,系统最清闲。但大家的连串的系统管理员总不能够老分外时间爬起来操作吧。

  文本以enter符号作为开始推行该行语句,用跳脱符 enter职责令接着下意气风发行写

4、if/then结构

布置职务的授命

  陈设命令分二次性布置周期性安插
at    安插作业在某偶然时试行贰次
batch 布署作业在系统负荷不重时执行壹回
cron 安顿周期性运营的学业

一遍性安排at和batch

  # 号作为教学行

5、while循环

at命令

除去at安顿义务
 at -d

翻看at布置职分
ls /var/spool/at/

实践脚本:

6、for循环

batch命令

作用:
  安插三个或七个指令在系统负荷较轻进运转二遍(平时景观下负载较轻指平均负载降低到0.8以下卡塔 尔(英语:State of Qatar)

应用方法同at

  首先授予实践权限:chmod +x filename.sh

 

周期性安排命令crontab

  成效:用于生成cron进度所须要的crontab文件

crontab命令:

crontab[-u user] [-l | -r | -e] [-i]

-l: 列出装有职务;

-e: 编辑职分;

-r: 移除全体职责;

-i:同-r一起使用,以人机联作式情势移除钦命职分

-u user: 仅root可运维,钦定客商管理cron职责

crontab命令定义,种种顾客都有专项使用的cron任务文件:/var/spool/cron/USE福特ExplorerNAME

 

小心:运营结果的专门的学问输出和错误以邮件通告给有关客商

 centos7 # systemctl status atd crond开机时需运行服务

                 systemctl enable atd crond  重启照旧起步的

centos6 # service crond atd start开机时需运维服务

                 chkconfig --list atd crond开机运行确认保障为on状态

/var/spool/cron/ :存放客户的天职业安全健康排

 

/etc/cron.{allow,deny}  :调节客商成立职责陈设黑白名单,同at原理相符

 

/var/log/cron :日志文件

 

/etc/cron.hourly/ :每小时推行的脚本

 

/etc/cron.daily/ :每日实践的台本

 

/etc/cron.weekly/ :每一周试行的本子

 

/etc/cron.monthly/ :每一个月实行脚本

 

图片 2

图片 3

[root@rhel6 ~]# cat /etc/crontab #配置文件
SHELL=/bin/bash #执行任务命令的shell类型
PATH=/sbin:/bin:/usr/sbin:/usr/bin  #执行任务的环境变量
MAILTO=root  #执行任务的用户
HOME=/  #家目录

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed

图片 4

图片 5

 

时刻通配表示:

 

  • *:对应时间的装有有效取值,每
  • ,:离散时间点,和
  • -:三番三回时间点,到
  • /:对应取值范围内多长期三回,每间隔

 

图片 6

图片 7

@reboot     :系统启动后执行
@yearly  0 0 1 1 * :每年的1月1号00:00执行一次任务
@annually 0 0 1 1 * :每年的1月1号00:00执行一次任务
@monthly 0 0 1 * * :每月的1号00:00执行一次任务
@weekly  0 0 * * 0 :每周日的00:00执行一次任务
@daily  0 0 * * * :每天的00:00执行一次任务
@hourly  0 * * * * :每小时执行一次任务

图片 8

图片 9

 

 

 

对于cron职责来说,%有异乎平时用途;要是在指令中要使用%,则必要转义;可是,假设把%放置于单引号中,也足以不用转义

思考:哪些在秒等第运转职分?

  由于crontab最时辰间单位为分钟,所以大家供给借用sleep命令使其“睡一会”,来贯彻秒品级,及不能够整除时间单位的安排职分。

  相对路线执行:/home/../filename.sh

一、简介

sleep命令:

 sleep NUMBER [SUFFIX]...

   SUFFIX:

    s: 秒, 默认

    m: 分

    h: 小时

    d: 天

如:每20秒实行一遍

1
<span style="font-family: 宋体; font-size: 16px">* * * * *  for min in 0 1 2; do ech

图片 10

练习

①每12小时备份一次/etc目录至/backups目录中,保存文件名称格式为“/etc-yyyy-mm-dd-hh.tar.gz”

# crontab -e
0 */12 * * * tar -zcf  /backups/etc-`date +%F-%H`.tar.gz  /etc


②每周2,4,7备份/var/log/secure文件至/logs目录中,文件名格式为“secure-yyyymmdd”;

# crontab -e 
 * * * * 2,4,7  cp -r /var/log/secure  /logs/secre-`date +%F`


③每两个小时取出当前系统/proc/meminfo文件中以S或M开头的行信息追加至/tmp/meminfo.txt文件中;

# crontab -e
  0 */2 * * * grep "^[SM].*"/proc/meminfo >> /tmp/meminfo.txt


④四月的第一个星期日早晨1点59分运行a.sh

# crontab -e
 59 1 1-7 4 * test `date +%w` -eq 0 && bash a.sh
⑤工作日时间,每10分钟执行一次磁盘空间检查,一旦发现任何分区利用率高于80%,就执行wall警报

# vim /testdir/disk.sh
#!/bin/bash
a=`df | grep  "^/dev/sd" | tr -s ‘ ‘ ‘%‘| cut -d% -f5 | sort -n  | tail -1`
if [ $a -gt 80 ];then
wall "The disk will be full"
fi
# chmod +x disk.sh
# crontab -e 
*/10 * * * 1-5 /testdir/disk.sh

图片 11

  相对路线试行:./filename.sh

1、什么是shell

  将filename.sh放在path目录下,直接施行filename.sh

shell是客户与系统人机联作的分界面。shell是大器晚成种命令解释程序,同期也是生机勃勃种高等程序设计语言

  借用bash执行:bash filename.sh 或者 sh filename.sh

2、shell不足为道类别

常用操作:

Bourne Shell(/usr/bin/sh或/bin/sh)

  输出:echo [-ne] 字符串 【表达 -n字符串不活动换行, -e 对有的字符做非常管理

Bourne Again Shell(/bin/bash)

    如: a 发出警报声
         b 删除前叁个字符
            c 最终不加上换行符号
            f 换行但光标依然停留在原本的岗位
            n 换行且光标移至行首
            r 光标移至行首,但不换行
            t 插入tab
            v 与f相同
            \ 插入字符

C Shell(/usr/bin/csh)

  退出程序: exit n 【表达 n位数字,不可胜言的为0,可以动用$? 获取那个n值。

K Shell(/usr/bin/ksh)

  获取显示屏输入新闻: read -p 字符串 变量名 【说明 将字符串赋给变量。

Shell for Root(/sbin/sh)

  显示日期:$(date +%Y%m%d) 将当今天期格式化为年月日

里头:Bash在平日专门的学问中被普及利用;同不常候,Bash也是大大多Linux系统私下认可的Shell;

  条件决断:test

3、shell局限性

    test -e /filename && echo "exist" || echo "Not exist"

1.1、需求开销多量能源的职务,极度是对实施进程需求较高的场子

    文件或目录项目决断:

1.2、涉及大气的数学计算

       -e 文件或目录存在

1.3.、关键性应用(数据库,网址等卡塔 尔(阿拉伯语:قطر‎

       -f  存在且为文件

1.4.、设计图片大概GUI的应用

         -d 存在且为目录

1.5.、须要一向访谈硬件

    文件或目录权限决断:

1.6.、开辟闭源的利用(相对于开源卡塔 尔(英语:State of Qatar)

         -r 文件或目录可读

4、基础

       -w 文件或目录可写

文件系统:Linux 的文件系统是三个饱含了目录和文件的分段的团队结构,位于最上方的称之为根目录(root directory),用斜杠/ 来表示

       -x 文件或目录可施行

目录: 是风流洒脱种含有目录项的公文,每一个目录项中都满含了文本名

       -s 文件或目录存在且为非空

文件名: 目录的开始和结果称为目录项,目录项满含了文件名,独有三种字符不允许出未来文书名中:斜杠,空字符(ASCII 值为0),斜杠用于分隔路线中的文件名,空字符用来代表路径的末段。文件名的长度日常能够直达252个字符

    文件间相比较:

路径: 生龙活虎雨后冬笋文件名连起来,用斜杠分隔,就叫做路线,路线用于表示文件的地点;以斜杠初始的门径叫做相对路线,不然为绝对路线,相对路线相对于当前职业目录

       -nt (newer than) 【test file1 -nt file2】

重回码:全部命令都有三个再次回到值,用0-255时期的整数来表示;脚本正是一个命令,它也许有重回值,其余,脚本里面包车型大巴函数也许有重临值

       -ot(older than)

退出脚本的正规方法是醒目地用命令exit [code]来退出,如:exit 0;exit $?

          -ef 相同

 

     两整数间比较:

二、read

       -eq 相等 【test n1 -eq n2】

1、定义

       -ne 不相等

read是二个buildin命令,首要成就对参数的赋值,肖似C语言中的scanf;

       -gt 大于

其不但可以赋值变量,仍可以够赋值数组;

       -lt 小于

其输入不唯有是显示器,仍然是能够是文件叙述符

       -ge 大于等于

2、实操

       -le 小于等于

# read a --输入字符串,将字符串赋值给变量 a;# echo $a

    字符串决断:

hello world!!

       test -z string 字符串为空

# read name sex age --同时分别给三个变量赋值,输入分隔符默感觉 空格符

       test -n string 字符串非空 【-n可省】

zhangsan male 50

       test str1 == str2

# unset name sex age --删除变量

       test str1 != str2

# IFS=';' --将 read 的输入分隔符改为 ';'

    多规格决断:

# vim test.sh

       test -r file -a -x file 文件file 同时 拥有 r 和 x 权限 【-a -o !】

#!/bin/bash

  条件判别 [   ]

prompt="Please enter your name:"

    eg:[ “test“ == “test“ ],【注意空格键,加单双引号】

read -p "$prompt" name

  shell 自带变量

echo "Greetings $name"

    sh filename.sh op1 op2 op3 ,在filename文本中以$0 表示filename,$1 表示op1,$2 代表op2,$3 表示op3,$# 表示参数个数,$@ 代表“$1”“$2”“$3”,$* 表示“$1 $2 $3”

 

  shift 义务令参数变量号偏移

三、运算工具

    假如sh filename op1 op2 op3 op4 在sh文本中

1、轻巧数学生运动算

      echo $1   # 显示op1

# echo $((1+2**2-3*4/5%6)) --输出计算结果到显示器

        shift         #舞狮一人

# a=$((1+2**2-3*4/5%6)) --把总括结果赋给变量a

        echo $1   #显示op2

# ((a=1+2**2-3*4/5%6)) --同上

      shift 2      #偏移2位

# echo "scale=3;10/3" | bc --bc计算器;保留小数点后四人

      echo $1   #显示op4

# echo "2^10" | bc --bc计算器;计算2的10次方

  条件判别语句

# awk 'BEGIN{print 1/3}' --awk计算

    if [ 条件发挥式 ] ; then

2、获取随机数

      试行语句;

# od -N4 -tu4 /dev/urandom | sed -n '1s/.* //p' --获取三个7位数的号码

    elif [ 条件发挥式 ]; then

# od -Ad -w24 -tu4 /dev/urandom --获取随机数

      试行语句

# od -tu8 /dev/urandom --获取随机数

    fi

# od -tu8 /dev/urandom | sed -r 's/^[0-9]+s+//' | sed -r 's/s+/n/g' |cut -b1-8 |sed -r -n '/^.{8}$/p' | sed 's/^/186/' |head -n5000 |vi - --获取后生可畏万个电话号码

  case 语句

# od -N40000 -tu4 /dev/urandom | sed -r 's/^[0-9]+(s+)?//' | sed -r 's/s+/n/g' | grep -vE '^s*$' > 10k_random --生成意气风发万个随机数

    case $变量名 in

# sed -r -n '/^.{8}$/p' 10k_random | head -n 100000 | sed 's/^/186/' > phone_num

      "第生机勃勃种变量")

3、获取数字系列

        操作;;

# seq 10 --获取1到10

      "第三种变量")

# seq 1 2 10 --获取1到10,步长为2

        操作;;

# seq 10 100 --获取10到100

      *)    #不是率先种和第三种的

# seq 10 -1 1 --倒序,10到1

        操作;;

 

    esac

四、if/then实例

  循环

1、判定字符 "a" 是或不是等于 "A"

    1.while [ 条件发挥式 ]                    2.util [ 条件发挥式 ]                      3.for var in con1 con2 con3 【大概的简单的值】                   

# vim test.sh

    do  # 循环境与发展轫          do                                                  do                         

#!/bin/bash

      程序段             程序段                                      程序段                       

if [[ "a" = "A" ]]; then

    done  # 循环甘休        done             done      

if [ "a" = "A" ]; then

    4.for((i=1;i<10;i++))

  echo "a equals A"

     do

else

        程序段

  echo "a no equals A"

     done

fi

    表达:在for循环中,可以用$(seq 1 100),也许{1..100} 表示三翻五次的数也许字母,${RANDOM} linux随机数变量。范围[0,32767]

2、剖断/root/test/test.sh是不是留存并兼有可进行权限

shell script 的调试:

# vim test.sh

  sh -nvx filename.sh  -n 不施行文书,仅查询语法难题,-v 履行前,先输出文件,-x 将文件内容和出口语句同步输出。

#!/bin/bash

source filename.sh 推行脚本:

if test -x /root/test/test.sh;then

  推行该脚本是在父bash中实施的,执行完后,能够直接 echo ${filename.sh中的变量},获得变量值;而sh filename.sh 后,echo不能够出口文件中的变量名。

  echo "/root/test/test.sh is executable"

  

fi

3、判定系统是还是不是留存 root 客商

# vim test.sh

#!/bin/bash

if grep -E --color=auto ^root: /etc/passwd; then

  echo "user root exists"

fi

4、判别文件类型

# vim test.sh

#!/bin/bash

function isSymbolicLink() {

  file=$1

  flag=$(ls -ld $file | cut -b1)

  test "$flag" = "1"

  return $?

}

file=$1

if isSymbolicLink $file; then

  echo "Symbolic Link"

elif test -d $file; then

  echo "Directory file"

elif test -f $file; then

  echo "Regular file"

elif test -b $file; then

  echo "Block special"

elif test -c $file; then

  echo "Character special"

elif test -p $file; then

  echo "Named pipe"

elif test -S $file; then

  echo "Socket"

else

  echo "Unkown"

fi

5、判定输入数字的朗朗上口

# vim test.sh

#!/bin/bash

num=$1

if test "$num" -lt 10 ;then

  echo "小数字"

elif test "$num" -lt 20;then

  echo "中数字"

elif test "$num" -lt 30;then

  echo "大数字"

else

  echo "相当的大数字"

fi

6、从标准输入获取一个数字,并依据其大小输出钦点字符串

# vim test.sh

#!/bin/bash

echo -n "Enter a number: "

read num

if [ "$num" -lt 100 ]; then

echo "小于100"

elif [ "$num" -ge 100 -a "$num" -lt 200 ]; then

echo "大于等于100低于200"

elif [ "$num" -ge 200 -a "$num" -lt 300 ]; then

echo "大于等于200稍低于300"

else

echo "此外数字"

fi

 

五、wihle循环

1、认识

测量试验 while 关键字背后一条命令的重回码,条件为真时,程序读入while循环体中的指令;0为真。循环体如下:

while [] --while 后边运转 [ ] 命令,测试 [ ] 命令的再次来到码

cat /filename | while read line       --while 前边运维read 命令,测量试验 read 命令的重临码

do

......

done

2、循环调控语句

continue --终止当前轮回,开头下贰个周而复始

break --终止当前轮回,并退出循环体

exit --终止当前剧本

3、实例

# vim test.sh --区分 continue 与 break 的区别

#!/bin/bash

while true

do

sleep 1

本文由澳门新葡亰手机版发布于操作系统,转载请注明出处:脚本入门,计划任务

上一篇:没有了 下一篇:没有了
猜你喜欢
热门排行
精彩图文