一、脚本编程知识点
1、获取变量中字符的长度:${#VARNAME}
2、变量赋值:
a)${parameter:-word}:如果parameter为空或未定义,则变量展开为“word”;否则,展开为parameter的值;
如:A=3
echo ${A:-30}
unset A
echo ${A:-30}
b)${parameter:+word}:如果parameter为空或未定义,不做任何操作;否则,则展开为“word”值;
如:echo ${A:+30}
A=1
echo ${A:+30}
c)${parameter:=word}:如果parameter为空或未定义,则变量展开为“word”,并将展开后的值赋值给parameter;
如:unset A
echo {A:=30}
d)${parameter:offset}:offest表示跳过几个;
e)${parameter:offset:length}:截取子串,从offset处的后一个字符开始,取lenth长的子串;
如:A=‘Hello world’
echo {A:2:3}
3、脚本配置文件
/etc/rc.d/init.d/服务脚本,服务脚本支持配置文件:/etc/sysconfig/服务脚本同名的配置文件
4、变量作用域,局部变量:local VAR_NAME=
如:编辑一个脚本,注意其中函数定义加local和不加local的区别
#!/bin/bash
#
a=1
test() {
local a=$[3+4]
}
test
for I in `seq $a 10`; do
echo $I
done
5、命令mktemp:创建临时文件或目录,避免与其他文件名重复
mktemp /tmp/file.XX(tmp目录默认30天清理一次)
-d: 创建为目录
二、信号捕捉
1、信号:
kill -SIGNAL PID
1: HUP
2: INT
9: KILL
15: TERM
2、脚本中,能实现信号捕捉,但9和15无法捕捉
Ctrl+c: SIGINT
3、信号捕捉命令:trap
trap ‘COMMAND‘ 信号列表
如:编辑一个脚本,捕捉Ctrl+c信号;
#!/bin/bash
#
trap ‘echo "You go ..."‘ INT
while :;do
date
sleep 2
done
4、一行执行多个语句,语句间用分号分隔;
脚本实例:
创建脚本ping.sh,捕捉Ctrl+c信号。并清理脚本运行中产生的临时文件。
#!/bin/bash
#
NETWORK=192.8.8.
FILE=`mktemp /tmp/file.XX`
clearup() {
echo "quit..."
rm -rf $FILE
exit 1
}
trap ‘clearup‘ INT
for I in `seq 10 200` ;do
if ping -c 1 -w 1 $NETWORK$I &> /dev/null;then
echo "$NETWORK$I is up." | tee >> $FILE
else
echo "$NETWORK$I is down."
fi
done
三、任务计划
1、任务计划方式:
a)在未来的某个时间点执行一次某任务;
at
batch
b)周期性地执行某任务;
cron
2、at相关
a)使用格式:
at 时间
at> COMMAND
at> Ctrl+d
b)指定时间格式:
绝对时间:HH:MM, DD.MM.YY MM/DD/YY
相对时间:now+#
单位:minutes, hours, days, weeks
模糊时间:noon, midnight, teatime
c)选项:
at -l = atq :显示作业
at -d AT_JOB_ID = atrm AT_JOB_ID :删除某个作业
d)/etc/at.deny和/etc/at.allow文件
控制使用at命令的用户
e)命令的执行结果:将以邮件的形式发送给安排任务的用户;
3、cron相关:
cron:自身是一个不间断运行的服务,运行在线主机上。
anacron:cron的补充,能够实现让cron因为各种原因在过去的时间该执行而未执行的任务,在恢复正常执行一次;
a)cron:
a1)系统cron任务:定义在/etc/crontab中
格式:分钟 小时 天 月 周 用户 任务
a2)用户cron任务:定义在/var/spool/cron/USERNAME中
格式:分钟 小时 天 月 周 任务
b)时间的有效取值:
b1)分钟:0-59
b2)小时:0-23
b3)天:1-31
b4)月:1-12
b5)周:0-7,0和7都表示周日
c)时间通配表示:
c1)*:对应的所有有效取值:
如:每小时的第三分钟:3 * * * *
每周每小时的第三分钟:3 * * * 7
每天的12点13分:13 12 * * *
每月6号12点13分:13 12 6 * *
每年的7月6号12点13分:13 12 6 7 *
c2),:离散时间点取值:
如:每小时的10分和40分:10,40 * * * *
每周二周五的每小时的10分40分:10,40 * * * 2,5
每周二周五的2点的10分40分:10,40 02 * * 2,5
c3)-:连续时间点:
如:每周一到周五的2点10分:10 02 * * 1-5
c4)/#:对应取值范围内每多久一次,
如:每3分钟一次:*/3 * * * *
每2小时:01 */2 * * *
每隔1小时:* */2 * * *
每隔一天:10 04 */2 * *
d)执行结果将以邮件形式发送给管理员;
如:只把错误的执行结果发送给管理员:
*/3 * * * * /bin/cat /etc/fstab > /dev/null
e)cron的环境变量:cron执行的所有命令都去PATH环境变量指定的路径下去找,在脚本中添加:
#!/bin/bash
export PATH=/bin:/sbin:/usr/bin:/usr/sbin
f)用户任务管理命令:crontab
-l:列出当前用户的所有cron任务
-e:编辑cron任务
-r:移除所有cron任务
-u USERNAME:管理其他用户的cron任务
g)cron服务
service crond status
chkconfig --list crond
4、anacron相关
a)/etc/anacrontab文件字段(最小时间单位是每天)
第一段:过去几天未执行
第二段:开机后的第多少分钟开始运行
第三段:表示注释信息
第四段:表示执行的任务
b)anacron服务默认是关闭的:
service anacron status
cron任务练习:
配置本机每隔两天在凌晨3点20分备份一次/etc目录,备份文件存放至/backup/etc目录。文件名形如:etc-2012-06-20.tar.bz2
20 03 */2 * * root /bin/tar -jcf /backup/etc/etc-`date +%F`.tar.bz2 /etc/*
Linux01-BASH脚本编程之信号捕捉及任务计划53,布布扣,bubuko.com