补充:
交叉编译:
make ARCH=
${parameter:-word}:如果parameter为空或者未定义,则变量展开为word,否则,展开为parameter的值
${parameter:+word}:如果parameter为空或者未定义,不做任何操作,否则,则展开word的值
${parameter:=word}:如果parameter为空或者未定义,则变量展开为word,并将展开后的值赋给parameter
${parameter:offset:length}:取子串,从offset处的后一个字符开始,取length长的子串
例如:变量A未做任何赋值
echo ${A:-30} 30 echo $A
echo ${A:+30} echo $A
echo ${A:=30} 30 echo $A 30
A=”hello”
echo ${A:2:3} llo
读取配置文件:
#vim a.conf
TEST=”5”
#vim a.sh
. /root/a.conf
[ -n “TEST” ] && echo $TEST
#vim a.conf
TEST=
#vim a.sh
. /root/a.conf
TEST=${TEST:-info}
[ -n “TEST” ] && echo “$TEST”
如果TEST为空,则输出info,否则显示TEST的值。
变量的作用域:
1 | #!/bin/bash |
1 | a=1 |
执行结果是 7 8 9 10
所以需要局部变量:
local VAR_NAME=
mktemp命令:创建临时文件或者目录
mktemp:
1 | #mktemp /tmp/file.XX |
这个命令不管执行多少次,XX值不会一样
-d:创建临时目录
信号:
kill -l:显示所有
kill -SIGNAL PID
1:HUP
2:INT
9:KILL
15:TERM
脚本中,能实现信号捕捉,但9和15无法捕捉
Ctrl+c:是2信号
Ctrl+z:是18信号
trap命令:
trap ’COMMAND‘ 信号列表
1 |
|
如果不加trap那行,使用Ctrl+c可以终止掉,但是trap捕捉2号信号,则表示
如果使用Ctrl+c终止时,trap捕捉到2号信号,就会显示You go…并且会照常运行,
不会被终止掉。
(所以,trap在于你要捕捉的信号,可以使用kill -l显示你想要捕捉的信号)
ping可以捕捉到Ctrl+c,则不会接受这个信号,如:
1 |
|
任务计划:
在未来的某个时间点执行一次某任务:
at
batch
#at 时间
at>command1
at>command2
at>Ctrl+d即可
指定时间:
绝对时间: DD.MM.YY MM.DD.YY 10:20(未来的时间,如果今天已过,则明天)
相对时间: now+#
单位:minutes,hours,days,weeks
模糊时间:noon,midnight,teatime
命令的执行结果,将以邮件的形式发送给安排任务的用户。
at -l:
可以显示自己的作业
at -d AT_JOB_ID:
可以删除作业
/etc/at.deny:只有文件中的用户不能使用
/etc/at.allow:只有这个文件中的用户可使用at
如果两个文件都存在,只是读取at.allow….batch:自动选择系统较空闲的时候执行任务,不需要执行时间(当然没必要)
其他一样。周期性的执行某任务
cron:自身就是一个不间断运行的任务
anacron:cron的补充,能够实现让cron因为各种原因在过去的时间该执行而未执行的任务在恢复正常
执行一次。
service crond status
service anacron status
cron:
系统cron任务
/etc/crontab
分钟 小时 天 月 周 用户 任务
vim /etc/crontab可查看系统上怎么定义的。
用户cron任务
/var/spool/cron/USERNAME
分钟 小时 天 月 周 任务时间的有效值:
分钟:0-59
小时:0-23
天:1-31
月:1-12
周:0-7,0和7都表示周日时间通配表示:
*:敌营的所有有效取值
3 * * * *
3 * * * 7
13 12 * * *
一般说:天和周不要同时使用
,:离散时间点
10,40 * * * * 每小时10分和40分执行一次
-:连续时间点
10 02 * * 1-5 周一到周五02:10连续执行
/:对应取值范围内每多久一次
*/3 * * * * 每三分钟一次
执行结果将以邮件形式发送给管理员
1 | 练习:每两小时执行一次 |
!!!!!!!!!!!!cron的环境变量:(这个需要多加注意)!!!!!!!!!!!!!!
cron执行所有命令都去PATH环境变量指定的路径下去找
如用户没登陆,怎么找PATH环境变量
所以,需要写绝对路径..(也可写脚本时写上环境变量)
PATH=/sbin:/bin:/usr/sbin:/usr/bin
可看/etc/crontab怎么写的。。。。。。。。
/etc/cron.daily
用户任务的管理:
crontab
-l:列出当前用户的所有cron任务
-e:编辑
-r:移除所有任务
-u USERNAME:管理其他用户的cron任务
crontab -u user1 -e 编辑任务即可。。
将会保存到/var/spool/crom/user1的计划任务中。。。
crontab -e
*/3 * * * * /bin/echo “how are you”
保存退出即可。。anacrontab:
cat /etc/anacrontab可以看看怎样定义的。。。
1 65 cron.daily run-parts /etc/cron.daily
如果1天没执行,则在开机后第65分钟开始执行
7 70 cron.weekly run-parts /etc/cron.weekly
如果7天没执行,则在开机第70分钟执行
30 75 cron.monthly run-parts /etc/cron.monthly
如果30天没执行,则在开机第75分钟开始执行所以只能执行到每天任务
练习:配置本机每隔两天在凌晨3点20备份一次/etc目录,备份文件存放至/backup/etc目录,文件名类似:etc-2012-06-20.tar.bz2
1 | mkdir /backup && tar cfj etc-`date +%F`.tar.bz2 /etc/* |