cleanup: 一个清空/var/log目录下的日志文件的脚本
1.脚本编写
#!/bin/bash# Cleanup, 版本 3# 注意:# -------# 这个脚本使用了相当多的特性,这些我们稍后将会解释.## 到那时,你已经学了这本书的一半了,你将不会再对shell感觉神秘了。#LOG_DIR=/var/logROOT_UID=0 # 只有用户ID变量$UID值为0的用户才有root权限.LINES=50 # 默认的行数E_XCD=66 # 不能进入到目录时的退出代码值E_NOTROOT=67 # 不是root用户时退出的代码值# 必须以root用户运行,以下进行检测if [ "$UID" -ne "$ROOT_UID" ]then echo "Must be root to run this script." exit $E_NOTROOTfi if [ -n "$1" ]# 测试是否提供了命令行参数(即是测试命令行参数至少有一个参数)then lines=$1else lines=$LINES # Default, if not specified on command line.fi # Stephane Chazelas建议,#+ 下面是一种更好的检测命令行参数的方法,#+ 但是对于现在来说还是有些高级。## E_WRONGARGS=65 # 不是数字参数 (参数格式不对)时的退出码## case "$1" in# "" ) lines=50;;# *[!0-9]*) echo "Usage: `basename $0` file-to-cleanup"; exit $E_WRONGARGS;;# * ) lines=$1;;# esac##* 可以跳到"循环"那章阅读开头一部分去了解上面的代码意思.cd $LOG_DIRif [ `pwd` != "$LOG_DIR" ] # 也可以用 if [ "$PWD" != "$LOG_DIR" ] # 如果工作目录不在/var/log里?then echo "Can't change to $LOG_DIR." exit $E_XCDfi #在操作清空日志文件之前再次检查是否在正确的目录里# 可以像下面再次确定是否在正确的目录里:## cd /var/log || {# echo "Cannot change to necessary directory." >&2# exit $E_XCD;# }tail -$lines messages > mesg.temp # 保存message日志文件最后面几行日志信息到临时文件.mv mesg.temp messages # 然后用临时文件覆盖messages日志文件# cat /dev/null > messages#* 上面这句把messages日志文件全部清空,这样没有上面那样保留最后几行安全cat /dev/null > wtmp # ': > wtmp' and '> wtmp' have the same effect.echo "Logs cleaned up."exit 0# #一个脚本以0为退出代码表明脚本执行成功.
?
2.脚本运行
?
?
?
?